Binary Tree Inorder Traversal

1. Recursive

Straight Forward, Add left -> root -> right

复制代码
/**
 * Definition of TreeNode:
 * public class TreeNode {
 *     public int val;
 *     public TreeNode left, right;
 *     public TreeNode(int val) {
 *         this.val = val;
 *         this.left = this.right = null;
 *     }
 * }
 */
public class Solution {
    /**
     * @param root: The root of binary tree.
     * @return: Inorder in ArrayList which contains node values.
     */
    public ArrayList<Integer> inorderTraversal(TreeNode root) {
        // write your code here
        ArrayList<Integer> rst = new ArrayList<Integer>();
        if(root == null) {
            return rst;
        }
        traversal(rst, root);
        return rst;
    }
    
    private void traversal(ArrayList<Integer> rst, TreeNode root) {
        if (root == null) {
            return;
        }
        traversal(rst, root.left);
        rst.add(root.val);
        traversal(rst, root.right);
    }
}
复制代码

 

2. Iterator

1. Create a node to present current node.

2. If current node is not null and stack is not empty

   1) keep adding all the left child to the stack.

   2) move the current node to the top of the stack

   3) pop the top node and add it to the result list

   4) let the current node to be the right child.

 

复制代码
/**
 * Definition of TreeNode:
 * public class TreeNode {
 *     public int val;
 *     public TreeNode left, right;
 *     public TreeNode(int val) {
 *         this.val = val;
 *         this.left = this.right = null;
 *     }
 * }
 */
public class Solution {
    /**
     * @param root: The root of binary tree.
     * @return: Inorder in ArrayList which contains node values.
     */
    public ArrayList<Integer> inorderTraversal(TreeNode root) {
        // write your code here
        ArrayList<Integer> rst = new ArrayList<Integer>();
        Stack<TreeNode> stack = new Stack<TreeNode>();
        TreeNode curNode = root;
        while (curNode != null || !stack.empty()) {
            //reach deepest left child
            while (curNode != null) {
                stack.push(curNode);
                curNode = curNode.left;
            }
            curNode = stack.peek();
            stack.pop();
            rst.add(curNode.val);
            curNode = curNode.right;
        }
        return rst;
    }
}
复制代码

 

posted on 2017-03-12 01:54  codingEskimo  阅读(96)  评论(0)    收藏  举报

编辑推荐:
· 一则复杂 SQL 改写后有感
· golang中写个字符串遍历谁不会?且看我如何提升 50 倍
· C# 代码如何影响 CPU 缓存速度?
· 智能桌面机器人:使用 .NET 为树莓派开发 Wifi 配网功能
· C# 模式匹配全解:原理、用法与易错点
阅读排行:
· 《程序员的底层思维》读后感
· 曾经风光无限的 Oracle DBA 已经落伍了吗?
· 一则复杂 SQL 改写后有感
· C# 锁机制全景与高效实践:从 Monitor 到 .NET 9 全新 Lock
· 接口被刷百万QPS,怎么防?

导航

< 2025年6月 >
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 1 2 3 4 5
6 7 8 9 10 11 12

统计

点击右上角即可分享
微信分享提示