二叉树主要是进行递归遍历。
前序:根节点进行访问=>对左子树进行递归遍历=>对右子树进行递归遍历
中序:对左子树进行递归遍历=>根节点进行访问=>对右子树进行递归遍历
后序:对左子树进行递归遍历=>对右子树进行递归遍历=>根节点进行访问
以前序遍历为例:
根节点为A,打印A;递归访问A.left,打印B;然后递归访问B.left,先打印D;递归访问D.left,D.left为null;递归访问D.right,D.right为null;递归访问B.right,先打印E,递归访问E.left,先打印G;递归访问G.left,为null;递归访问G.right,是H,先打印H,递归访问H.left为null;递归访问H.right,为null;递归访问E.right,为null;左子树遍历完毕。递归访问A.right,是C,先打印C;递归访问C.left是null;递归访问C.right是F;递归访问F.left,是null;递归访问F.right是null。这棵树遍历结束。
public class BinaryTree {
static class Node{
public char val;
public Node left;
public Node right;
public Node(char val) {
this.val = val;
}
}
//构建一棵树
public static Node buildtree(){
Node A=new Node('A');
Node B=new Node('B');
Node C=new Node('C');
Node D=new Node('D');
Node E=new Node('E');
Node F=new Node('F');
Node G=new Node('G');
Node H=new Node('H');
A.left=B;
A.right=C;
B.left=D;
B.right=E;
E.left=G;
G.right=H;
C.right=F;
return A;
}
//前序遍历,递归
public static void preOrder(Node root){
if(root==null){
return;
}
System.out.print(root.val+" ");
preOrder(root.left);
preOrder(root.right);
}
//中序遍历,递归
public static void inOrder(Node root){
if(root==null){
return;
}
inOrder(root.left);
System.out.print(root.val+" ");
inOrder(root.right);
}
//后续遍历,递归
public static void postOrder(Node root){
if(root==null){
return;
}
postOrder(root.left);
postOrder(root.right);
System.out.print(root.val+" ");
}
public static void main(String[] args) {
Node node=buildtree();
System.out.print("前序遍历:");
preOrder(node);
System.out.println();
System.out.print("中序遍历:");
inOrder(node);
System.out.println();
System.out.print("后序遍历:");
postOrder(node);
System.out.println();
}
}