LeetCode OJ - Binary Tree Postorder Traversal and Preorder Traversal

二叉树的三种遍历,我之前写过这个的迭代实现,详见 这里

下面是Leetcode这道题的AC代码,同样采用迭代方法,但是我用了一个ArrayList去记录已经出栈的节点,这样当我考察栈顶节点是否直接弹出时,只要看它是否有左右子节点或者是它的左右子节点是否已经被弹出。这种方法可能在时间复杂度上更高。

 1 /**
 2      * 后序遍历
 3      * @param root
 4      * @return
 5      */
 6     public ArrayList<Integer> postOrderTraversal(TreeNode root)
 7     {
 8         ArrayList<Integer> r = new ArrayList<Integer>();
 9         if(root == null)
10             return null;
11         LinkedList<TreeNode> stack = new LinkedList<TreeNode>();
12         
13         ArrayList<TreeNode> tr = new ArrayList<TreeNode>();
14         stack.push(root);
15         while(!stack.isEmpty())
16         {
17             TreeNode temp = stack.peek();
18             if((temp.left == null && temp.right == null) ||
19                     tr.contains(temp.left) || tr.contains(temp.right))
20             {
21                 stack.pop();
22                 r.add(temp.val);
23                 tr.add(temp);
24             }else {
25                 if(temp.right!=null)
26                     stack.push(temp.right);
27                 if(temp.left!=null)
28                     stack.push(temp.left);
29             }
30         }
31         return r;
32     }
33     /**
34      * 先序遍历
35      * @param root
36      * @return
37      */
38     public ArrayList<Integer> preorderTraversal(TreeNode root)
39     {
40         if(root == null)
41             return null;
42         LinkedList<TreeNode> stack = new LinkedList<TreeNode>();
43         ArrayList<Integer> r = new ArrayList<Integer>();
44         stack.push(root);
45         while(!stack.isEmpty()){
46             TreeNode temp = stack.pop();
47             r.add(temp.val);
48             if(temp.right!=null)
49                 stack.push(temp.right);
50             if(temp.left!=null)
51                 stack.push(temp.left);
52         }
53         return r;
54     }

 

 

转载于:https://www.cnblogs.com/echoht/p/3687110.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值