二叉樹遍歷
前序遍歷:首先遍歷根節點,接着遍歷左子樹,最後遍歷右子樹。
中序遍歷:首先遍歷左子樹,接着遍歷根節點,最後遍歷右子樹。
後序遍歷:首先遍歷左子樹,接着遍歷右子樹,最後遍歷根節點。
遍歷思想:依據前序、中序、後序遍歷的特點,使用遞歸,依次對二叉樹的根節點、左子樹和右子
樹進行遍歷。
如上圖所示:
前序遍歷:1 2 4 5 3 6 7
中序遍歷:4 2 5 1 6 3 7
後序遍歷:4 5 2 6 7 3 1
代碼展示
package demo5;
public class BinaryTree {
TreeNode root;
//設置根節點
public void setRoot(TreeNode root){
this.root = root;
}
//獲取根節點
public TreeNode getRoot(){
return root;
}
public void frontShow() {
if(root!=null){
root.frontShow();
}
}
public void midShow() {
if(root!=null){
root.midShow();
}
}
public void afterShow() {
if(root!=null){
root.afterShow();
}
}
}
package demo5;
public class TreeNode {
//節點的權
int value;
//左兒子
TreeNode leftNode;
//右兒子
TreeNode rightNode;
public TreeNode(int value){
this.value = value;
}
//設置左兒子
public void setLeftNode(TreeNode leftNode) {
this.leftNode = leftNode;
}
//設置右兒子
public void setRightNode(TreeNode rightNode) {
this.rightNode = rightNode;
}
//前序遍歷
public void frontShow() {
//先遍歷當前節點的內容
System.out.print(value+" ");
//左節點
if(leftNode!=null){
leftNode.frontShow();
}
//右節點
if(rightNode!=null){
rightNode.frontShow();
}
}
//中序遍歷
public void midShow() {
//左節點
if(leftNode!=null){
leftNode.midShow();
}
//當前節點
System.out.print(value+" ");
//右節點
if(rightNode!=null){
rightNode.midShow();
}
}
//後序遍歷
public void afterShow() {
//左節點
if(leftNode!=null){
leftNode.afterShow();
}
//右節點
if(rightNode!=null){
rightNode.afterShow();
}
//當前節點
System.out.print(value+" ");
}
}
package demo5;
public class TestBinaryTree {
public static void main(String[] args) {
//創建一棵樹
BinaryTree binaryTree = new BinaryTree();
//創建一個根節點
TreeNode root = new TreeNode(1);
//把根節點賦給樹
binaryTree.setRoot(root);
//創建一個左節點
TreeNode rootL = new TreeNode(2);
//把新創建的節點設置爲根節點的子節點
root.setLeftNode(rootL);
//創建一個右節點
TreeNode rootR = new TreeNode(3);
//把新創建的節點設置爲根節點的子節點
root.setRightNode(rootR);
//爲第二層的左節點創建兩個子節點
rootL.setLeftNode(new TreeNode(4));
rootL.setRightNode(new TreeNode(5));
//爲第二層的右節點創建兩個子節點
rootR.setLeftNode(new TreeNode(6));
rootR.setRightNode(new TreeNode(7));
//前序遍歷樹
System.out.print("前序遍歷:");
binaryTree.frontShow();
System.out.println();
//中序遍歷樹
System.out.print("中序遍歷:");
binaryTree.midShow();
System.out.println();
//後序遍歷樹
System.out.print("後序遍歷:");
binaryTree.afterShow();
System.out.println();
}
}