上次学习了二叉树的前中后递归遍历和层序遍历以求及深度,宽度等,接下来又学习了二叉树的前中后序非递归的实现:利用栈的原理来实现
//前中后序非递归实现:
// 前序遍历
void preOrderTraversalNor(Node root) {
if (root == null) return;
Stack<Node> stack = new Stack<>();
Node cur = root;
while (cur != null || !stack.empty()) {
while (cur != null) {
System.out.print(cur.val + " ");
stack.push(cur);
cur = cur.left;
}
Node top = stack.pop();
cur = top.right;
}
}
// 中序遍历
void inOrderTraversalNor(Node root) {
if (root == null) return;
Stack<Node> stack = new Stack<>();
Node cur = root;
while (cur != null || !stack.empty()) {
while (cur != null) {
stack.push(cur);
cur = cur.left;
}
Node ret = stack.pop();
System.out.print(ret.val+" ");
cur = ret.right;
}
}
// 后序遍历
void postOrderTraversalNor(Node root) {
if (root == null) return;
Stack<Node> stack = new Stack<>();
Node cur = root;
Node prev = null;
while (cur != null || !stack.empty()) {
while (cur != null) {
stack.push(cur);
cur = cur.left;
}
cur = stack.peek();
//cur.right == prev是为了检测右结点是否打印过,打印过了就不再指向右节点
if (cur.right == null || cur.right == prev) {
prev = stack.pop();
System.out.print(cur.val + " ");
cur = null;
} else {
cur = cur.right;
}
}
}