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 二叉树的中序遍历  

最新文章

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

热门文章

  1. 案例实战之如何写一个webpack loader
  2. 猎豹全球智库执行院长:中国App出海的三大规律和最具代表的五大垂直品类
  3. Vue --- 基础简介
  4. AOP_原理
  5. May Cook-Off 2019 解题报告
  6. 001_keil仿真
  7. springboot(二)
  8. JavaScript的深入理解(1)
  9. PDB文件会影响性能吗?
  10. CURL shell 使用