[LeetCode] 144. Binary Tree Preorder Traversal 二叉树的先序遍历
2024-10-21 16:13:53
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 二叉树的中序遍历
最新文章
- JavaScript变量声明提前
- HDU 5884 (贪心)
- android之MP3播放器(1)
- 简单了解.net
- 【ibus】设置ibus输入法(pinyin &; sunpinyin)
- UIPickView 和 UIDatePicker
- C#拼音转换,将简体中文转换成拼音
- Bootstrap,导航栏点击效果修复(补)
- oracle数据库元数据SQL查询
- 合理使用mysql中的load data infile导入数据
- 你真的有必要退出吗——再说Android程序的退出功能
- 亲测 安装windows7
- javascript继承之借用构造函数与原型
- C# FTPHelper(搬运)
- css写出三角形(兼容IE)
- 安卓http源码查看器详解
- hdu_1036(取整和格式控制)
- Codeforces Round #471 (Div. 2) C. Sad powers
- ASP.NET MVC系列:web.config中ConnectionString aspnet_iis加密与AppSettings独立文件
- 2019春第七周作业Compile Summarize