二叉树的基本遍历,包括前序、中序和后序,实现方式有递归和非递归;
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;
}
}
}