2019-08-23 剑指 把二叉树打印成多行

10min,逻辑很简单,使用两个栈,就不用考虑下一层有多少个节点了

class Solution:
    # 返回二维列表[[1,2],[4,5]]
    def Print(self, pRoot:TreeNode):
        if not pRoot:return []
        q1,q2=deque(),deque()
        res=[]
        q1.append(pRoot)
        while q1:
            tmp=[]
            while q1:
                front = q1.popleft()
                tmp.append(front.val)
                if front.left:q2.append(front.left)
                if front.right:q2.append(front.right)
            res.append(tmp)
            q1=q2
            q2=deque()
        return res

7min,是前序遍历,但是通过函数参数把层数记录下来,载入到相对应的list中,特别清晰易懂,很妙

class Solution2:
    # 返回二维列表[[1,2],[4,5]]
    def Print(self, pRoot):
        res=[]
        self.dfs(pRoot,1,res)
        return res

    def dfs(self,pRoot:TreeNode,depth,res:List):
        if not pRoot:return
        if depth>len(res):res.append([pRoot.val]) # 笔误写成res
        else:res[depth-1].append(pRoot.val)
        self.dfs(pRoot.left,depth+1,res)
        self.dfs(pRoot.right,depth+1,res)  # 函数参数没写全

你可能感兴趣的:(2019-08-23 剑指 把二叉树打印成多行)