Inorder Traverse without Stack
Question
Solution
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;
}Last updated