import java.util.Stack; class TreeNode2 { public char val; public TreeNode2 left; public TreeNode2 right; public TreeNode2(char val) { this.val = val; } } class BinaryTree { public TreeNode2 root; public TreeNode2 createTree() { TreeNode2 A = new TreeNode2('A'); TreeNode2 B = new TreeNode2('B'); TreeNode2 C = new TreeNode2('C'); TreeNode2 D = new TreeNode2('D'); TreeNode2 E = new TreeNode2('E'); TreeNode2 F = new TreeNode2('F'); TreeNode2 G = new TreeNode2('G'); TreeNode2 H = new TreeNode2('H'); A.left = B; A.right = C; B.left = D; B.right = E; C.left = F; C.right = G; E.right = H; return A; } // 前序遍历 void preOrderTraversal(TreeNode2 root){ if (root == null) return; Stack<TreeNode2> stack = new Stack<>(); TreeNode2 cur = root; TreeNode2 top = null; while (cur != null || !stack.empty()) { while (cur != null) { stack.push(cur); System.out.print(cur.val + " "); cur = cur.left; } top = stack.pop(); cur = top.right; } System.out.println(); } // 中序遍历 void inOrderTraversal(TreeNode2 root) { if (root == null) return; Stack<TreeNode2> stack = new Stack<>(); TreeNode2 cur = root; TreeNode2 top = null; while (cur != null || !stack.empty()) { while (cur != null) { stack.push(cur); cur = cur.left; } top = stack.pop(); System.out.print(top.val+" "); cur = top.right; } System.out.println(); } // 后序遍历 void postOrderTraversal(TreeNode2 root) { if (root == null) return; Stack<TreeNode2> stack = new Stack<>(); TreeNode2 cur = root; TreeNode2 top = null; TreeNode2 prev = null; while (cur != null || !stack.empty()) { while (cur != null) { stack.push(cur); cur = cur.left; } cur = stack.peek(); if (cur.right == null || cur.right == prev) { stack.pop(); System.out.print(cur.val +" "); prev = cur; cur = null; }else{ cur = cur.right; } } System.out.println(); } }
2021-11-09实现二叉树的非递归 先序, 中序, 后序遍历
最新推荐文章于 2024-05-16 10:23:10 发布