美文网首页
树的遍历,构造及最大深度(Python)

树的遍历,构造及最大深度(Python)

作者: Yuri7 | 来源:发表于2019-06-25 12:41 被阅读0次

树的遍历(Tree Traverse)

深度优先搜索(DFS)

递归(Recurision)

def re(self.root):
    if not root:
        return None
    #插入部分, preorder, inorder, postorder

前序遍历(preorder)

    print(root.val)
    self.re(root.left)
    self.re(root.right)

中序遍历(inorder)

    self.re(root.left)
    print(root.val)
    self(root.right)

后序遍历(postorder)

    self.re(root.left)
    self.re(root.right)
    print(root.val)

利用递归找寻最大深度

class Solution:
    def maxDepth(self, root: TreeNode) -> int:
        if not root:
            return 0
        left_max = self.maxDepth(root.left)
        right_max = self.maxDepth(root.right)
        return max(left_max, right_max)+1

非递归(Non-recurision)

前序遍历(preorder)
方法一

stack,node=[],root
while stack or node:
    while node:
        print(node.val)
        stack.append(node)
        node=node.left
    node=stack.pop()
    node=node.right

方法二

stack=[root]
while len(stack)>0:
    print(root.val)
    if root.right:
        stack.append(root.right)
    if root.left:
        stack.append(root.left)
    root=stack.pop()

中序遍历(inorder)

stack, node= [], root
while stack or node:
    while node:
        stack.append(node)
        node=node.left
    node=stack.pop()
    print(node.val)
    node=node.right

后序遍历(postorder)
方法一

stack1, stack2, node=[], [], root
while stack1 or node:
    while node:
        stack1.append(node)
        stack2.append(node)
        node=node.right
    node=stack1.pop()
    node=node.left
while stack2:
    print(stack2.pop().val())

方法二

stack, stack2=[root], []
while len(stack)>0:
     node=stack.pop()
     stack2.append(node)
     if node.left:
        stack.append(node.left)
     if node.right:
        stack.append(node.right)
while len(stack2)>0:
     print(stack2.pop().val())

广度优先搜索(BFS)

层次遍历(level traversal)

stack, node = [root], root
while stack:
    node = stack.pop(0)
    print (node.val)
    if node.left: 
       stack.append(node.left)
    if node.right: 
       stack.append(node.right)

利用BFS找寻树的最大深度

class Solution:
    def maxDepth(self, root: TreeNode) -> int:
        if not root:
            return 0
        stack = [root]
        level = 0
        while stack:
            level = level+1
            for _ in range(len(stack)):
                root = stack.pop(0)
                if root.left:
                    stack.append(root.left)
                if root.right:
                    stack.append(root.right)
        return level

相关文章

  • 树的遍历,构造及最大深度(Python)

    树 树的遍历(Tree Traverse) 深度优先搜索(DFS) 递归(Recurision) 前序遍历(pre...

  • 【LeetCode】树专题

    101.对称二叉树 102.二叉树的层次遍历(BST) 104.树的最大深度 105.从前序与中序遍历序列构造二叉...

  • 实现二叉树前序、中序、后序遍历及广度优先遍历、层序遍历

    构造一个树的数据结构tree,如下: 前序遍历 中序遍历 后序遍历 注:上述三种遍历都是深度优先遍历 广度优先遍历...

  • 二叉树的最大/最小深度

    给定如下二叉树, 分别返回其最大深度4, 最小深度2。 求最大深度 按照广度遍历 跟层级遍历类似,最后返回总数组的...

  • 二叉树

    深度优先遍历 递归 DFS 广度优先遍历 递归BFS 二叉树的最大最小深度 判断二叉树是否中轴对称

  • 二叉树相关算法

    二叉树定义 前序遍历(中序遍历、后续遍历只需要调整append的顺序即可) 层序遍历 二叉树的最大深度 对称二叉树...

  • 深度优先遍历(DFS)和广度优先遍历(BFS)

    深度优先遍历 1 构造 是否遍历过数组2 构造队列 添加未遍历过元素3 取元素 遍历 添加未遍历元素进队列4 全部...

  • LeetCode 102.二叉树的层序遍历 python/sca

    环境:python 3.6,scala 2.11.8 题意 按二叉树的层次/深度遍历,自上而下,从左到右。 分析 ...

  • 前端二叉树

    (一)构造二叉树 (二)中序遍历 (三)前序遍历 前序遍历可以复制二叉树,效率比重新构造二叉树高 (四)后序遍历 ...

  • 二叉树

    是否对称树 是否相同 中序遍历 二叉树的最大深度 二叉树的层序遍历输入:root = [3,9,20,null,n...

网友评论

      本文标题:树的遍历,构造及最大深度(Python)

      本文链接:https://www.haomeiwen.com/subject/dxnmqctx.html