Inorder Traverse without Stack

Question

Suppose each node has the attribute 'parent'.

Solution

The key point is to determining the lastNode we visited. So that we can know the current walking path.

public List<DoubleLinkedTreeNode> inorderWithoutStack(DoubleLinkedTreeNode root) {
    DoubleLinkedTreeNode curNode = root, lastNode = null;
    List<DoubleLinkedTreeNode> res = new ArrayList<>();
    while(curNode != null) {
        if(lastNode == curNode.parent) { // go down
            if(curNode.left!=null) {
                lastNode = curNode;
                curNode = curNode.left;
            }else if(curNode.right!=null) {
                res.add(curNode);
                lastNode = curNode;
                curNode = curNode.right;
            }else {
                res.add(curNode);
                lastNode = curNode;
                curNode = curNode.parent;
            }            
        }else if(lastNode == curNode.left) { // go up
            res.add(curNode);
            if(curNode.right!=null) {
                lastNode = curNode;
                curNode = curNode.right;
            }else {
                lastNode = curNode;
                curNode = curNode.parent;
            }
        }else if(lastNode == curNode.right) { // go up    
            lastNode = curNode;
            curNode = curNode.parent;
        }
    }
    return res;
}

Implement the iterator for inorder. (unchecked)

Last updated