leetcode 之Binary Tree Postorder Traversal
2016-05-26 17:47
344 查看
题目描述:
Given a binary tree, return the postorder traversal of its nodes' values.
For example:
Given binary tree
return
即 给定一颗二叉树。 使用后序遍历输出。 不用递归的方式。
首先递归的方式:后续遍历的话先访问左子树,然后访问右子树,然后访问根节点。
非递归的思想是,需要向左找到叶子节点,并将节点依次放入栈中,并标记这些节点的左子树已经被访问了一次了。然后判断叶子节点的右子树是否存在,如果叶子节点右子树存在,继续向左找到叶子节点。。。并标记该节点的右子树已经访问过了。
代码如下:
Given a binary tree, return the postorder traversal of its nodes' values.
For example:
Given binary tree
{1,#,2,3},
1 \ 2 / 3
return
[3,2,1].
即 给定一颗二叉树。 使用后序遍历输出。 不用递归的方式。
首先递归的方式:后续遍历的话先访问左子树,然后访问右子树,然后访问根节点。
# Definition for a binary tree node. # class TreeNode(object): # def __init__(self, x): # self.val = x # self.left = None # self.right = None class Solution(object): def postorderTraversal(self, root): """ :type root: TreeNode :rtype: List[int] """ res = [] if not root: return res self.get(root, res) return res def get(self, root, res): if root.left: self.get(root.left, res) if root.right: self.get(root.right, res) res.append(root.val)
非递归的思想是,需要向左找到叶子节点,并将节点依次放入栈中,并标记这些节点的左子树已经被访问了一次了。然后判断叶子节点的右子树是否存在,如果叶子节点右子树存在,继续向左找到叶子节点。。。并标记该节点的右子树已经访问过了。
代码如下:
# Definition for a binary tree node. # class TreeNode(object): # def __init__(self, x): # self.val = x # self.left = None # self.right = None class Solution(object): def postorderTraversal(self, root): """ :type root: TreeNode :rtype: List[int] """ res = [] tmp = [] flag = [] // 右子树被访问标记 flag1 = [] // 左子树被访问标记 if not root: return res tmp.append(root) while tmp: while root.left and root not in flag1: tmp.append(root.left) flag1.append(root) root = root.left node = tmp[-1] if node not in flag: if node.right: tmp.append(node.right) flag.append(node) root = node.right continue else: root = tmp.pop() res.append(root.val) else: root = tmp.pop() res.append(root.val) return res
相关文章推荐
- 启动Tomcat提示:指定的服务未安装
- C# 将时间戳 byte[] 转换成 datetime 的几个方法
- JavaScript中setTimeout的用法
- 支付宝或者微信支付的回调处理
- NetBeans 使用远程Git库
- puppet学习与精通之入门
- java && & 区别
- 丰厚资本杨守彬:创业就是从地狱到天堂,路过人间而已
- Android--ViewPager的使用(未使用fragment)
- n个元素进栈,输出所有出栈序列-卡特兰数-递归
- eclipse 代码提示均无效的问题解决方案
- Android 按下home键,程序在后台运行,在launcher里面再点击icon又重新启动了
- Caused by: java.lang.ClassNotFoundException: org.apache.ibatis.mapping.DatabaseIdProvider
- 并发下常见的加锁及锁的PHP具体实现
- 慢查询日志及分析工具
- 140.Sort List
- 获取屏幕分辨率的方法
- CodeForces 669A Little Artem and Presents
- 51NOD 1004 n^n的末位数字
- java中BitMap实现