前序遍历:
根节点---->左子树---->右子树
中序遍历:
左子树---->根节点---->右子树
后序遍历:
左子树---->右子树---->根节点
二叉树为:
二叉树相当于双向链表。左右都有结点
代码:
定义结点类
public class Node {
public int data; //自己本身值
public Node left; //左结点
public Node right; //右结点
public Node() {
}
public Node(int data, Node left, Node right) {
this.data = data;
this.left = left;
this.right = right;
}
public int getData() {
return data;
}
public void setData(int data) {
this.data = data;
}
public Node getLeft() {
return left;
}
public void setLeft(Node left) {
this.left = left;
}
public Node getRight() {
return right;
}
public void setRight(Node right) {
this.right = right;
}
}
public class Tree {
// 注意必须逆序建立,先建立子节点,再逆序往上建立,因为非叶子结点会使用到下面的节点,而初始化是按顺序初始化的,不逆序建立会报错
public Node init() {
Node a9 = new Node(9, null, null);
Node a8 = new Node(8, null, null);
Node a7 = new Node(7, null, null);
Node a6 = new Node(6, null, null);
Node a5 = new Node(5, null, null);
Node a4 = new Node(4, a8, a9);
Node a3 = new Node(3, a6, a7);
Node a2 = new Node(2, a4, a5);
Node a1 = new Node(1, a2, a3);
return a1; // 返回根节点
}
//打印结点值
public void printNode(Node node) {
System.out.print(node.getData() + " ");
}
//前序遍历,根-左-右,相当于 小于号<
public void firstTraversal(Node node){
printNode(node); //每次打印的都是根节点的值
if(node.getLeft() != null){
firstTraversal(node.getLeft());
}
if(node.getRight() != null){
firstTraversal(node.getRight());
}
}
//中序遍历,左-根-右,相当于 尖括号^
public void middleTraversal(Node node){
if(node.getLeft() != null){
middleTraversal(node.getLeft());
}
printNode(node); //每次打印的都是根节点的值
if(node.getRight() != null){
middleTraversal(node.getRight());
}
}
//后序遍历,左-右-根,相当于 大于号>
public void endTraversal(Node node){
if(node.getLeft() != null){
endTraversal(node.getLeft());
}
if(node.getRight() != null){
endTraversal(node.getRight());
}
printNode(node); //每次打印的都是根节点的值
}
public static void main(String[] args) {
Tree tree = new Tree();
Node node = tree.init();
System.out.println("先序遍历");
tree.firstTraversal(node);
System.out.println("");
System.out.println("中序遍历");
tree.middleTraversal(node);
System.out.println("");
System.out.println("后序遍历");
tree.endTraversal(node);
}
}
结果为:
先序遍历
1 2 4 8 9 5 3 6 7
中序遍历
8 4 9 2 5 1 6 3 7
后序遍历
8 9 4 5 2 6 7 3 1