zoukankan      html  css  js  c++  java
  • 二叉树遍历

    二叉树递归遍历

    # Definition for a binary tree node.
    # class TreeNode:
    #     def __init__(self, val=0, left=None, right=None):
    #         self.val = val
    #         self.left = left
    #         self.right = right
    class Solution:
        def inorderTraversal(self, root: TreeNode) -> List[int]:
            # 前序
            perv = []
            # 中序
            mid = []
            # 后序
            last = []
            def find(root):
               if not root:
                   return
               perv.append(root.val)
               find(root.left)
               mid.append(root.val)
               find(root.right)
               last.append(root.val)
            find(root)
            return [prev, mid, last]
    

    二叉树非递归前序遍历(中左右)

    # Definition for a binary tree node.
    # class TreeNode:
    #     def __init__(self, val=0, left=None, right=None):
    #         self.val = val
    #         self.left = left
    #         self.right = right
    class Solution:
        def postorderTraversal(self, root: TreeNode) -> List[int]:
            if not root:
                return []
            res = []
            stack = [root]
            while stack:
                node = stack.pop()
                res.append(node.val)
                if node.right:
                    stack.append(node.right)
                if node.left:
                    stack.append(node.left)
            return res
    

    二叉树非递归中序遍历(左中右)

    # Definition for a binary tree node.
    # class TreeNode:
    #     def __init__(self, val=0, left=None, right=None):
    #         self.val = val
    #         self.left = left
    #         self.right = right
    class Solution:
        def inorderTraversal(self, root: TreeNode) -> List[int]:
            stack = []
            res = []
            while root or stack:
                if root:
                    stack.append(root)
                    root = root.left
                else:
                    node = stack.pop()
                    res.append(node.val)
                    root = node.right
            return res
    

    二叉树非递归后序遍历(左右中 ==> 前序(中左右)> 中右左(反转))

    # Definition for a binary tree node.
    # class TreeNode:
    #     def __init__(self, val=0, left=None, right=None):
    #         self.val = val
    #         self.left = left
    #         self.right = right
    class Solution:
        def postorderTraversal(self, root: TreeNode) -> List[int]:
            """
            后序等于前序(左右)的变换, 然后反转 得到
            """
            if not root:
                return []
            res = []
            stack = [root]
            while stack:
                node = stack.pop()
                res.append(node.val)
                if node.left:
                    stack.append(node.left)
                if node.right:
                    stack.append(node.right)
            # 翻转
            return res[::-1]
    
    此时此刻,非我莫属
  • 相关阅读:
    java连接远程linux的redis
    Mac下Sublime Text 3安装配置
    矩阵覆盖
    Mac下配置Tomcat
    用 O(1) 时间检测整数 n 是否是 2 的幂次。
    快速编程之禅
    如何在centos 7.4 上安装 python 3.6
    大众点评实时监控系统CAT的那些坑
    如何在 centos 7.3 上安装 caffe 深度学习工具
    为什么中文编程项目失败率特别高?
  • 原文地址:https://www.cnblogs.com/taozhengquan/p/15354375.html
Copyright © 2011-2022 走看看