class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode() {
}
TreeNode(int val) {
this.val = val;
}
TreeNode(int val, TreeNode left, TreeNode right) {
this.val = val;
this.left = left;
this.right = right;
}
}
class test {
// 1
// 2 3
// 4 5 6 7
@Test //
public void test12() {
TreeNode a = new TreeNode(1);
TreeNode b = new TreeNode(2);
TreeNode c = new TreeNode(3);
TreeNode d = new TreeNode(4);
TreeNode e = new TreeNode(5);
TreeNode f = new TreeNode(6);
TreeNode g = new TreeNode(7);
a.left = b;
a.right = c;
b.left = d;
b.right = e;
c.left = f;
c.right = g;
TreeNode root = a;
List<Integer> list = new ArrayList<>();
pre(root, list);
list.stream().forEach(s -> System.out.print(s + " "));
}
// 非递归的前序遍历 1 2 4 5 3 6 7
public void pre(TreeNode root, List<Integer> list) {
Stack<TreeNode> stack = new Stack<>();
while (root != null || !stack.isEmpty()) {
while (root != null) {
list.add(root.val);
stack.push(root);
root = root.left;
}
root = stack.pop();
root = root.right;
}
}
// 非递归中序 4 2 5 1 6 3 7
public void mid(TreeNode root, List<Integer> list) {
Stack<TreeNode> stack = new Stack<>();
while (root != null || !stack.isEmpty()) {
while (root != null) {
stack.push(root);
root = root.left;
}
root = stack.pop();
list.add(root.val);
root = root.right;
}
}
// 非递归后序 4 5 2 6 7 3 1
public void post(TreeNode root, List<Integer> list) {
Stack<TreeNode> stack = new Stack<>();
TreeNode prev = null;
while (root != null || !stack.isEmpty()) {
while (root != null) {
stack.push(root);
root = root.left;
}
root = stack.pop();
if (root.right == null || root.right == prev) {
list.add(root.val);
prev = root;
root = null;
} else {
stack.push(root);
root = root.right;
}
}
}
}
二叉树非递归前序、中序、后序遍历
最新推荐文章于 2022-09-25 11:01:42 发布