zoukankan      html  css  js  c++  java
  • 树的各种遍历

    树的遍历

    1.前序遍历(preoOrder)

    https://leetcode.com/problems/binary-tree-preorder-traversal/

    # Definition for a binary tree node.
    # class TreeNode(object):
    #     def __init__(self, x):
    #         self.val = x
    #         self.left = None
    #         self.right = None
    
    class Solution(object):
        def preorderTraversal(self, root):
            """
            :type root: TreeNode
            :rtype: List[int]
            """
            res = []
            node = []
            if not root:
                return res
            node.append(root)
            while node:
                temp = node.pop()
                res.append(temp.val)
                if temp.right:
                    node.append(temp.right)
                if temp.left:
                    node.append(temp.left)
            return res
    # 递归实现
    # return [root.val] + self.preorderTraversal(root.left) + self.preorderTraversal(root.right) if root is not None else []
    
    

    2.中序遍历(inOrder)

    https://leetcode.com/problems/binary-tree-inorder-traversal/

    # Definition for a binary tree node.
    # class TreeNode(object):
    #     def __init__(self, x):
    #         self.val = x
    #         self.left = None
    #         self.right = None
    
    class Solution(object):
        def inorderTraversal(self, root):
            """
            :type root: TreeNode
            :rtype: List[int]
            """
            node = []
            res = []
            if not root:
                return res
            node.append(root)
            temp = root
            while node:
                while temp and temp.left:
                    node.append(temp.left)
                    temp = temp.left
                temp = node.pop()
                res.append(temp.val)
                temp = temp.right
                if temp:
                    node.append(temp)
            return res
    # 递归实现
    #return self.inorderTraversal(root.left) + [root.val] + self.inorderTraversal(root.right) if root is not None else []
    

    3.后序遍历(postOrder)

    https://leetcode.com/problems/binary-tree-postorder-traversal/

    # Definition for a binary tree node.
    # class TreeNode(object):
    #     def __init__(self, x):
    #         self.val = x
    #         self.left = None
    #         self.right = None
    
    class Solution(object):
        def postorderTraversal(self, root):
            """
            :type root: TreeNode
            :rtype: List[int]
            """
            # 反的‘前序遍历’(根->右->左)
            node = []
            res = []
            if not root:
                return res
            node.append(root)
            temp = root
            while node:
                temp = node.pop()
                if temp:
                    res.append(temp.val)
                    node.append(temp.left)
                    node.append(temp.right)
            return res[::-1]
    # 递归求解
    # return self.postorderTraversal(root.left) + self.postorderTraversal(root.right) + [root.val] if root is not None else []          
    

    4.层次遍历(Level Order Traversal)-从上到下

    https://leetcode.com/problems/binary-tree-level-order-traversal/

    # Definition for a binary tree node.
    # class TreeNode(object):
    #     def __init__(self, x):
    #         self.val = x
    #         self.left = None
    #         self.right = None
    
    class Solution(object):
        def levelOrder(self, root):
            """
            :type root: TreeNode
            :rtype: List[List[int]]
            """
            if not root:
                return []
            result, level = [], [root]
            while level:
                result.append([node.val for node in level])
                temp = []
                for node in level:
                    temp.append(node.left)
                    temp.append(node.right)
                level = [node for node in temp if node]
            return result
    

    5.层次遍历(Level Order Traversal)-从下到上

    https://leetcode.com/problems/binary-tree-level-order-traversal-ii/

    # Definition for a binary tree node.
    # class TreeNode(object):
    #     def __init__(self, x):
    #         self.val = x
    #         self.left = None
    #         self.right = None
    
    class Solution(object):
        def levelOrderBottom(self, root):
            """
            :type root: TreeNode
            :rtype: List[List[int]]
            """
            if not root:
                return []
            result, level = [], [root]
            while level:
                result.insert(0, [node.val for node in level])
                temp = []
                for node in level:
                    temp.append(node.left)
                    temp.append(node.right)
                level = [node for node in temp if node]
            return result
    

    6.之字形遍历(Zigzag Level Order Traversal)

    https://leetcode.com/problems/binary-tree-zigzag-level-order-traversal/

    # Definition for a binary tree node.
    # class TreeNode(object):
    #     def __init__(self, x):
    #         self.val = x
    #         self.left = None
    #         self.right = None
    
    class Solution(object):
        def zigzagLevelOrder(self, root):
            """
            :type root: TreeNode
            :rtype: List[List[int]]
            """
            if not root:
                return []
            result, level, direction = [], [root], 1
            while level:
                result.append([node.val for node in level][::direction])
                direction *= -1
                temp = []
                for node in level:
                    temp.append(node.left)
                    temp.append(node.right)
                level = [node for node in temp if node]
            return result
    
  • 相关阅读:
    WPF 基于 Azure 的认知服务 情绪分析 语言检测 关键短语提取
    白板类应用的模式交互设计方案
    dotnet Multi-platform App UI 多平台应用 UI 框架简介
    Windows 窗口样式 什么是 WS_EX_NOREDIRECTIONBITMAP 样式
    Windows 对全屏应用的优化
    GitHub Action 新上线 WPF .NET Core 自动构建模板
    为何 WPF 对 vcruntime140 有引用
    用 C# 写脚本 如何输出文件夹内所有文件名
    排序、去重与离散化
    二分
  • 原文地址:https://www.cnblogs.com/binwone/p/6041606.html
Copyright © 2011-2022 走看看