public class 二叉树便利_循环 {
public List preOrder(TreeNode root) {
List ans = new ArrayList<>();
Stack stack = new Stack();
while (!stack.isEmpty() || root != null) {
while (root != null) {
ans.add(root.val);
stack.push(root);
root = root.left;
}
root = stack.pop();
root = root.right;
}
return ans;
}
public List innerOrder(TreeNode root) {
List ans = new ArrayList<>();
Stack tmp = new Stack<>();
while (root != null || !tmp.isEmpty()) {
while (root != null) {
tmp.push(root);
root = root.left;
}
root = tmp.pop();
ans.add(root.val);
root = root.right;
}
return ans;
}
public List postOrder(TreeNode root) {
List ans = new ArrayList<>();
Stack tmp = new Stack<>();
TreeNode tmpRoot = null;
while (root != null || !tmp.isEmpty()) {
while (root != null) {
tmp.push(root);
root = root.left;
}
root = tmp.pop();
if (root.right == null || tmpRoot == root.right) {
ans.add(root.val);
tmpRoot = root;
root = null;
} else {
tmp.push(root);
root = root.right;
}
}
return ans;
}
@Test
public void main() {
System.out.println(preOrder(TreeNode.initTree()).toString());
System.out.println(innerOrder(TreeNode.initTree()).toString());
System.out.println(postOrder(TreeNode.initTree()).toString());
}
}