二叉树的基本遍历,包括前序、中序和后序,实现方式有递归和非递归;
public class TreeNode { Object val; TreeNode left; TreeNode right; TreeNode(Object x) { val = x; } }
public class BinaryTreeTraversal { public static void main(String[] args) { TreeNode root = new TreeNode("A"); TreeNode l1 = new TreeNode("B"); TreeNode l2 = new TreeNode("C"); TreeNode l3 = new TreeNode("D"); TreeNode l4 = new TreeNode("E"); TreeNode l5 = new TreeNode("F"); root.left = l1; l1.right = l2; root.right = l3; l3.left = l4; l3.right = l5; inOrder(root); inOrder1(root); } public static void preOrder(TreeNode root){ if(root != null){ visit(root); preOrder(root.left); preOrder(root.right); } } public static void inOrder(TreeNode root){ if(root != null){ inOrder(root.left); visit(root); inOrder(root.right); } } public static void postOrder(TreeNode root){ if(root != null){ postOrder(root.left); postOrder(root.right); visit(root); } } public static void preOrder1(TreeNode root){ Stack<TreeNode> stack = new Stack<TreeNode>(); TreeNode p = root; while(p != null || !stack.empty()){ while(p != null){ visit(p); stack.push(p); p = p.left; } if(!stack.empty()){ p = stack.pop(); p = p.right; } } } public static void inOrder1(TreeNode root){ Stack<TreeNode> stack = new Stack<TreeNode>(); TreeNode p = root; while(p != null || !stack.empty()){ while(p != null){ stack.push(p); p=p.left; } if(!stack.empty()){ p = stack.pop(); visit(p); p = p.right; } } } public static void postOrder1(TreeNode root){ Stack<TreeNode> stack = new Stack<TreeNode>(); TreeNode p = root, q=null; while(p != null){ while(p != null){ stack.push(p); p = p.left; } while(p != null && (p.right == null || p.right == q)){ visit(p); q = p; if(stack.empty()){ return; } p = stack.pop(); } stack.push(p); p = p.right; } }
}