[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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | 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)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | 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 |
类似题目:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步