这篇主讲的是二叉树。二叉树是数据结构中的基础部分,但也很重要。要了解二叉树,就要从二叉树的结构和基本性质开始学习。
二叉树(Binary Tree)是n(n>=0)个结点的有限集合,该集合或者为空集,或者由两颗互不相交的、分别为根结点的左子树和右子树的二叉树组成。
特点:1 .每个结点最多有两颗子树。
2.二叉树是有序的。
package BinaryTree;
public class TreeNode {
int key;//关键字
TreeNode leftNode;//左节点
TreeNode rightNode;//右节点
public TreeNode(int key){
this.key = key;
}
public void setleftNode(TreeNode leftNode){
this.leftNode = leftNode;
}
public void setrightNode(TreeNode rightNode){
this.rightNode = rightNode;
}
}
package BinaryTree;
import java.util.ArrayList;
public class MyTree {
private int [] a = {1,3,4,7,5,10,16,14,9,18};
ArrayList <TreeNode> list = new ArrayList<TreeNode>();
public TreeNode creatTree(){
//将数据包装成节点
for(int i = 0;i<a.length;i++){
TreeNode treenode = new TreeNode(a[i]);
list.add(treenode);
}
//关联节点
for(int i=0;i<list.size()/2-1;i++){
TreeNode tree = list.get(i);
tree.setleftNode(list.get(2*i+1));
tree.setrightNode(list.get(2*i+2));
}
//单独处理最后一个父节点,判断是否有右子节点
int lastNode = list.size()/2-1;
TreeNode tree = list.get(lastNode);
tree.setleftNode(list.get(lastNode*2+1));
if(list.size()%2 != 0){
tree.setrightNode(list.get(lastNode*2+2));
}
return list.get(0);
}
//前序遍历
public void SerchFront(TreeNode first){
System.out.print(first.key +" ");
if(first.leftNode!= null){
SerchFront(first.leftNode);
}
if(first.rightNode!=null){
SerchFront(first.rightNode);
}
}
//中序遍历
public void SearchMiddle(TreeNode first){
if(first.leftNode!=null){
SearchMiddle(first.leftNode);
}
System.out.print(first.key + " ");
if(first.rightNode!=null){
SearchMiddle(first.rightNode);
}
}
//后序遍历
public void SearchLast(TreeNode first){
if(first.leftNode!=null){
SearchLast(first.leftNode);
}
if(first.rightNode!=null){
SearchLast(first.rightNode);
}
System.out.print(first.key + " ");
}
}
“`
package BinaryTree;
public class Test {
//测试数据
public static void main(String[] args) {
MyTree tree = new MyTree();
TreeNode node = tree.creatTree();
System.out.println("前序遍历");
tree.SerchFront(node);
System.out.println();
System.out.println("中序遍历");
tree.SearchMiddle(node);
System.out.println();
System.out.println("后序遍历");
tree.SearchLast(node);
}
}
测试数据