Tree Inorder Traversal

2019-04-22  本文已影响0人  尚无花名

Recursive的解法

public void traversalInorder(TreeNode root) {
        if (root == null) return;
        traversalInorder(root.left);
        System.out.println(root.val);
        traversalInorder(root.right);
    }

Iterative的解法

    public void traversalInorderIterative(TreeNode root) {
        Deque<TreeNode> deque = new ArrayDeque<>();
        firstNode(deque, root);
        while (!deque.isEmpty()) {
            TreeNode node = deque.pop();
            System.out.println(node.val);
            if (node.right != null) {
                firstNode(deque, node.right);
            }
        }
    }
    private void firstNode(Deque < TreeNode > stack, TreeNode root){
    //这个函数负责把当前结点push到最左边的孩子。
        while (root != null) {
            stack.push(root);
            root = root.left;
        }
    }

带parent pointer的解法

class TreeTraversalParent {
    public TreeNodeParent firstNode(TreeNodeParent root) {
        if (root == null) return null;
        while (root.left != null) root = root.left;
        return root;
    }
    public TreeNodeParent nextNode(TreeNodeParent cur) {
        if (cur.right != null) return firstNode(cur.right);
        while (cur.parent != null && cur == cur.parent.right)  cur  = cur.parent;
        return cur.parent;
    }
}
上一篇下一篇

猜你喜欢

热点阅读