Binary Tree Postorder Traversal
来源:互联网 发布:卡尔曼滤波算法 知乎 编辑:程序博客网 时间:2024/06/08 04:54
题目描述
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]
.
Note: Recursive solution is trivial, could you do it iteratively?
思路
递归方法很简单不说了。非递归方法利用栈,在一个while循环里将所有左孩子加入ans结果中,然后再加入右子树,直到dfs为空。我使用了一个pre的list来记录dfs中对应节点的父亲节点,然后在每个数据pop出来之后将其设置为null。这样其实改变的原来的树了。有其他方法可以不用改变原来的树的,这里我没有再多考虑了。
代码(Python)
递归方法:
# Definition for a binary tree node# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution: # @param root, a tree node # @return a list of integers def postorderTraversal(self,root): ans = [] if root is None: return [] if root.left is not None: ans+=self.postorderTraversal(root.left) if root.right is not None: ans+=self.postorderTraversal(root.right) ans+= [root.val] return ans
非递归方法:
# Definition for a binary tree node# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution: # @param root, a tree node # @return a list of integers def postorderTraversal(self,root): ans = [] dfs = [] pre = [] if root is not None: dfs.append(root) pre.append(root) v = root p = root while dfs != []: while v.left is not None: dfs.append(v.left) pre.append(v) v = v.left if v.right is not None: dfs.append(v.right) pre.append(v) v = v.right if v.left is None and v.right is None: v = dfs.pop() p = pre.pop() ans.append(v.val) if p.left is not None: p.left = None elif p.right is not None: p.right = None if dfs != []: v = dfs.pop() dfs.append(v) return ans
0 0
- Binary Tree Postorder Traversal
- Binary Tree Postorder Traversal
- Binary Tree Postorder Traversal
- Binary Tree Postorder Traversal
- Binary Tree Postorder Traversal
- Binary Tree Postorder Traversal
- Binary Tree Postorder Traversal
- Binary Tree Postorder Traversal
- Binary Tree Postorder Traversal
- Binary Tree Postorder Traversal
- Binary Tree Postorder Traversal
- Binary Tree Postorder Traversal
- Binary Tree Postorder Traversal
- Binary Tree Postorder Traversal
- Binary Tree Postorder Traversal
- Binary Tree Postorder Traversal
- Binary Tree Postorder Traversal
- Binary Tree Postorder Traversal
- UIApplication
- 数组或者list最大值最小值
- SQL 分页方法
- XMPP协议及实践
- 学java教程之访问权限
- Binary Tree Postorder Traversal
- Launch an application from another application on Android
- C++new和delete实现原理
- contenet标签的IE=edge属性和chrome=1属性
- trest
- CSS3学习笔记 之 基本选择器
- android java获得root权限调用linux命令
- [转]图像放缩之双线性内插值
- Binary Tree Preorder Traversal