二叉树
定义:二叉树是每个结点最多有两个子树的有序树。通常子树的根被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树常被用作二叉查找树和二叉堆或是二叉排序树。
一.必有一个特定的称为根的结点(ROOT);
二.剩下的结点被分成互不相交的集合,这些集合的每一个都是树,被称作根的子树。
1.树的度------也就是宽度,简单的说就是结点的分支数。以组成该树各结点中最大的度作为该树的度。
2.树的深度------组成该树各结点的最大层次。
3.森林------指若干棵互不相交的树的集合。
4.有序树------指树中同层结点从左到右有次序排列,它们之间的次序不能互换,这样的树称为有序树,否则称为无序树。
public class Mytree {
private Node root;
//添加元素
public void add(int x) {
Node p=new Node();
p.data=x;
if(root==null)
root=p;
else
root.addNode(p);
}
public void xx() {
if(root==null) return;
root.xianxu();
}
public void zx() {
if(root==null) return;
root.zhongxu();
}
public void hx() {
if(root==null) return;
root.houxu();
}
}
public class Node {
public int data;
public Node leftNode;
public Node rightNode;
//添加节点
//递归
public void addNode(Node t) {
if(t.data<this.data) {
if(this.leftNode==null)
leftNode=t;
else
leftNode.addNode(t);
}else {
if(rightNode==null)
rightNode=t;
else
rightNode.addNode(t);
}
}
//先序
public void xianxu() {
System.out.print(data+" ");
if(leftNode!=null) leftNode.xianxu();
if(rightNode!=null) rightNode.xianxu();
}
//中序
public void zhongxu() {
if(leftNode!=null) leftNode.zhongxu();
System.out.print(data+" ");
if(rightNode!=null) rightNode.zhongxu();
}
//后序
public void houxu() {
if(leftNode!=null) leftNode.xianxu();
if(rightNode!=null) rightNode.xianxu();
System.out.print(data+" ");
}
}
运行结果