基于 java 的二叉樹遍歷:二叉樹是一種非常重要的數(shù)據(jù)結(jié)構(gòu),很多其他數(shù)據(jù)機(jī)構(gòu)都是基于二叉樹的基礎(chǔ)演變過來的全谤。
下面是二叉樹有前肘迎、中柒巫、后三種遍歷方式;
public class Nodetest {
//后序遍歷的容器
static ArrayList<Node> list2 = new ArrayList<Node>();
//前序遍歷的容器
static List<Integer> list = new ArrayList<Integer>();
public static void main(String[] args) {
Node t1= new Node(1);
Node t2= new Node(2);
Node t3= new Node(3);
Node t4= new Node(4);
Node t5= new Node(5);
Node t6= new Node(6);
Node t7= new Node(7);
t1.left=t2;
t1.right=t3;
t2.left=t4;
t2.right=t5;
t3.left=t6;
t3.right=t7;
t4.left =null;
t4.right=null;
t6.left=null;
t6.right=null;
t7.left=null;
t7.right=null;
// 前序遍歷測試
headFun(t1);
for (int n : list) {
System.out.print(n+", ");
}
System.out.println();
// 后序序遍歷測試
beforeFun(t1);
for (Node n : list2) {
System.out.print(n.value+". ");
}
System.out.println();
list2.clear();
centreFun(t1);
for (Node n : list2) {
System.out.print(n.value+", ");
}
}
/**
* 前序遍歷
* 二叉樹的前序遍歷的遞歸調(diào)用 根節(jié)點(diǎn) -> 左支->右支
* @param Node
*
*/
public static void headFun(Node nodeHead){
if(nodeHead != null){
list.add(nodeHead.value);
}
if(nodeHead.left != null){
headFun(nodeHead.left);
}
if(nodeHead.right != null){
headFun(nodeHead.right);
}
}
/**
* 后續(xù)遍歷
* 二叉樹的前序遍歷的遞歸調(diào)用 左支->右支->根
* @param Node
*/
public static void beforeFun(Node node){
if(node != null){
if(node.left != null){
beforeFun(node.left);
}
if(node.right != null){
beforeFun(node.right);
}
list2.add(node);
}
}
/**
* 中序遍歷
* 左支--根--右支
* @param pHead
*/
public static void centreFun(Node node){
if(node != null){
if(node.left != null)
centreFun(node.left);
list2.add(node);
if(node.right != null)
centreFun(node.right);
}
}
}