zoukankan      html  css  js  c++  java
  • [LeetCode] 144. Binary Tree Preorder Traversal 二叉树的先序遍历

    Given a binary tree, return the preorder traversal of its nodes' values.

    For example:
    Given binary tree {1,#,2,3},

       1
        
         2
        /
       3
    

    return [1,2,3].

    Note: Recursive solution is trivial, could you do it iteratively?

    树的遍历,最常见的有先序遍历,中序遍历,后序遍历和层序遍历,它们用递归实现起来都非常的简单。而题目的要求是不能使用递归求解。

    1. 用迭代和stack。2. Morris Traversal Solution

    Python: Stack,  Time: O(n), Space: O(h) # h is the height of the tree

    class Solution2(object):
        def preorderTraversal(self, root):
            """
            :type root: TreeNode
            :rtype: List[int]
            """
            result, stack = [], [(root, False)]
            while stack:
                root, is_visited = stack.pop()
                if root is None:
                    continue
                if is_visited:
                    result.append(root.val)
                else:
                    stack.append((root.right, False))
                    stack.append((root.left, False))
                    stack.append((root, True))
            return result
    

    Python: Morris, Time: O(n), Space: O(1)

    class Solution(object):
        def preorderTraversal(self, root):
            """
            :type root: TreeNode
            :rtype: List[int]
            """
            result, curr = [], root
            while curr:
                if curr.left is None:
                    result.append(curr.val)
                    curr = curr.right
                else:
                    node = curr.left
                    while node.right and node.right != curr:
                        node = node.right
                
                    if node.right is None:
                        result.append(curr.val)
                        node.right = curr
                        curr = curr.left
                    else:
                        node.right = None
                        curr = curr.right
                    
            return result  

    类似题目:

    [LeetCode] 94. Binary Tree Inorder Traversal 二叉树的中序遍历  

  • 相关阅读:
    Python 初识爬虫-**机场出港业务
    Python 基础学习之字典
    Python 基础学习之if语句
    初识 超级账本
    搭建element-ui Vue结构
    回归
    Gin框架body参数获取
    log4go折腾
    go获取当前执行的位置程序
    mybatis generator 整合lombok
  • 原文地址:https://www.cnblogs.com/lightwindy/p/8486621.html
Copyright © 2011-2022 走看看