zoukankan      html  css  js  c++  java
  • 二叉树的层级遍历转换

    定义二叉树

    class TreeNode():
        def __init__(self, val = None, left = None, right = None):
            self.left = left
            self.right = right
            self.val = val

    1. 根据提供的列表创建成对应的二叉树,-1代表节点为空

    例如:

    输入:[3,9,20,-1,-1,15,7,-1,-1,-1,-1]

    输出:

        3
        / 
       9  20
         /  
        15   7
    #创建二叉树
    class Solution:
        def createtree(self, nums):
            if not nums: return None 
            
            new_tree = TreeNode(nums.pop(0))
            tree, left = new_tree, True
            stack = [tree]
    
            while stack:
                node = stack.pop(0)
    
                while nums:
                    pop_num = nums.pop(0)
    
                    if left:
                        if pop_num != -1:
                            node.left = TreeNode(pop_num)
                            stack.append(node.left)
                        left = False
                    else:
                        if pop_num != -1:
                            node.right = TreeNode(pop_num)
                            stack.append(node.right)
                        left = True 
                    
                    if left:
                        break 
            
            return new_tree 
    tree = Solution().createtree([3,9,20,-1,-1,15,7,-1,-1,-1,-1])

    2. 根据二叉树层次遍历

    例如:

    输入:

        3
        / 
       9  20
         /  
        15   7
    输出:[3,9,20,-1,-1,15,7,-1,-1,-1,-1]
    #层级遍历
    class Solution:
        def leveltravel(self, tree):
            if not tree: return []
    
            results = [tree.val]
            stack = [tree]
    
            while stack:
                node = stack.pop(0)
    
                if node.left: 
                    results.append(node.left.val)
                    stack.append(node.left)
                else:
                    results.append(-1) 
                    
                if node.right:
                    results.append(node.right.val)
                    stack.append(node.right)
                else:
                    results.append(-1) 
    
            return results           
    
    # tree = TreeNode(3, TreeNode(9), TreeNode(20, TreeNode(15), TreeNode(7)))
    res = Solution().leveltravel(tree)
    print(res)
  • 相关阅读:
    Mysql的表名/字段名/字段值是否区分大小写
    20个PHP程序性能优化的方法
    PHP中大括号用法
    PHP伪类型和伪变量
    PHP中关于取模运算及符号
    PHP之array_flip()方法
    PHP之implode()方法
    PHP中is_null()方法
    原型模式(Prototype)
    适配器模式
  • 原文地址:https://www.cnblogs.com/yunxintryyoubest/p/14125530.html
Copyright © 2011-2022 走看看