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?


Solution:

递归解法很简单:

 # Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None class Solution:
# @param {TreeNode} root
# @return {integer[]}
def preorderTraversal(self, root):
if root == None:
return []
else:
return [root.val] + self.preorderTraversal(root.left) + self.preorderTraversal(root.right)

迭代版本也是常规的将递归改成迭代的版本:

用一个栈来模拟递归的过程,注意栈 FILO 的特点。所以,对于当前根,要把右子树先加入栈,然后再把左子树加入栈。

前序遍历的顺序是:根 - 左子树 - 右子树。

代码如下:

 # Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None class Solution:
# @param {TreeNode} root
# @return {integer[]}
def preorderTraversal(self, root):
stack = []
path = []
if root != None:
stack.append(root)
while stack != []:
e = stack.pop()
path.append(e.val)
if e.right != None:
stack.append(e.right)
if e.left != None:
stack.append(e.left)
return path

最新文章

  1. 弹窗插件layer
  2. 李洪强iOS开发之下载
  3. HDU 5486 Difference of Clustering 图论
  4. mirantis fuel 学习
  5. 去掉 Warning:$HADOOP_HOME is deprecated
  6. 你不知道的JS(3)来聊聊this
  7. hbase 快速开发
  8. [java变量] - 字符串数组转long型数组
  9. 力扣(LeetCode)70. 爬楼梯
  10. 补偿接口中循环一直执行sql的问题
  11. RFS实例登录126邮箱/利用cookie登陆百度
  12. hdu 5524 Subtrees dfs
  13. SQLSERVER数据库备份操作和还原操作做了什么
  14. idea注册码激活防和谐
  15. Python笔记 #04# Methods
  16. mysql sql语句高级写法
  17. (经典) K&R的名著<<C程序设计语言>>二分查找
  18. 3.C++和C混合编程
  19. 吐泡泡(2018年全国多校算法寒假训练营练习比赛(第二场)+栈模拟)+Plug-in(codeforces81A+栈模拟)
  20. for循环中 i++和++i 是否有区别?

热门文章

  1. Hibernate的关联映射——单向1-1关联
  2. [问题2015S14] 复旦高等代数 II(14级)每周一题(第十五教学周)
  3. int与string之间的类型转换--示例
  4. EXCEL计算数字、汉字、英文单元格的计数
  5. php多维数组去除空元素
  6. 14.KVM安装之脚本和镜像目录树准备
  7. C语言面试题(二)
  8. IOS详解TableView——内置刷新,EGO,以及搜索显示控制器
  9. 从webRoot中下载Excel
  10. iOS - CocoaPods 第三方开源框架管理