leetcode 145. 二叉树的后序遍历

混江龙づ霸主 提交于 2019-12-06 12:59:54

给定一个二叉树,返回它的 后序 遍历。

示例:

输入: [1,null,2,3]
1
\
2
/
3

输出: [3,2,1]

 1 //递归算法
 2 class Solution {
 3     public List<Integer> postorderTraversal(TreeNode root) {
 4         List<Integer> list = new ArrayList<Integer>();
 5         if(root==null) return list;
 6         postorder(root,list);
 7         return list;
 8     }
 9     public List<Integer> postorder(TreeNode node,List<Integer> list){
10         if(node.left!=null)postorder(node.left,list);
11         if(node.right!=null)postorder(node.right,list);
12         list.add(node.val);
13         return list;
14     }
15 }
16 //迭代算法
17 class Solution {
18     public List<Integer> postorderTraversal(TreeNode root) {
19         List<Integer> list = new ArrayList<Integer>();
20         if(root==null)return list;
21         Stack<TreeNode> stack = new Stack<TreeNode>();
22         Stack<TreeNode> stackresult = new Stack<TreeNode>();
23         stack.push(root);
24         while(!stack.empty()){
25             TreeNode tmpnode = stack.pop();
26             stackresult.push(tmpnode);
27             if(tmpnode.left!=null)stack.push(tmpnode.left);
28             if(tmpnode.right!=null)stack.push(tmpnode.right);
29         }
30         while(!stackresult.empty()){
31             TreeNode tmpnode = stackresult.pop();
32             list.add(tmpnode.val);
33         }
34         return list;
35     }
36 }

直观想法:前序遍历的结果反转过来的结果是否就是后序遍历?再进一步分析在前序遍历的基础上改变下压栈的顺序即可。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!