今天跟大家分享二叉树常见的三种遍历方式。
根据访问结点操作发生位置命名。
- NLR:前序遍历(Preorder Traversal 亦称先序遍历)——访问根结点的操作发生在遍历其左右子树之前。
- LNR:中序遍历(Inorder Traversal)——访问根结点的操作发生在遍历其左右子树之中(间)。
- LRN:后序遍历(Postorder Traversal)——访问根结点的操作发生在遍历其左右子树之后。
下面是一个二叉树,我将递归遍历这个二叉树将它的每个节点的值输出:
代码:
public class TestTree {
static class Node{
public char val;
public Node left;
public Node right;
public Node(char val) {
this.val = val;
this.left = null;
this.right = null;
}
}
static Node build(){
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');
A.left = B;
A.right = C;
B.left = D;
B.right = E;
C.left = F;
C.right = G;
return A;
}
static void preorder(Node root) {//前序遍历
if(root==null) {
return;
}
System.out.println(root.val);
preorder(root.left);
preorder(root.right);
}
static void inorder(Node root) {//中序遍历
if(root==null) {
return;
}
inorder(root.left);
System.out.println(root.val);
inorder(root.right);
}
static void postorder(Node root){//后序遍历
if(root==null) {
return;
}
postorder(root.left);
postorder(root.right);
System.out.println(root.val);
}
public static void main(String[] args) {
Node root = build();
preorder(root);
Node root1 = build();
inorder(root1);
Node root2 = build();
postorder(root2);
}
}