/**
* 计算机的存储结构有顺序存储和链式存储
* 结点的度:结点拥有的子树数
* 叶结点/终端结点:度为0的结点
* 分支结点/非终端结点:度不为0
* 内部结点:除根结点外的分支结点
*
* 树的表示:双亲表示法、孩子表示法、孩子兄弟表示法
* 二叉树:每个结点最多2颗子树;左右有顺序;即使只有一颗子树,也要区分左右
* 特殊二叉树:
* 斜树:左斜树、右斜树 结点的个数与二叉树的深度相同
* 满二叉树:所有结点都存在左子树和右子树,并且所有叶子都在同一层上
* 叶子只能出现在最下一层
* 非叶子结点的度一定是2
* 同样深度的二叉树中,满二叉树的结点个数最多,叶子数最多
* 完全二叉树:满二叉树一定是完全二叉树。看树的示意图,给每个结点按照结构【逐层顺序】编号,无空挡就是,否则不是
* 叶子结点只能出现在最下两层
* 最下层的叶子一定集中在左部连续位置
* 倒数二层,若有叶子结点,一定都在右部连续位置
* 如果结点度为1,则只有左孩子,不存在只有右子树的情况
* 同样结点数的二叉树,完全二叉树的深度最下
*/
public class MyTree {
private String data;
private MyTree ltree;
private MyTree rtree;
public void setData(String data) {
this.data = data;
}
public MyTree(String data) {
this.data = data;
}
public String getData() {
return data;
}
public MyTree getLtree() {
return ltree;
}
public void setLtree(MyTree ltree) {
this.ltree = ltree;
}
public MyTree getRtree() {
return rtree;
}
public void setRtree(MyTree rtree) {
this.rtree = rtree;
}
}
创建一颗树
MyTree a=new MyTree("A");
MyTree b=new MyTree("B");
MyTree c=new MyTree("C");
MyTree d=new MyTree("D");
MyTree e=new MyTree("E");
MyTree f=new MyTree("F");
MyTree g=new MyTree("G");
MyTree h=new MyTree("H");
MyTree i=new MyTree("I");
MyTree j=new MyTree("J");
MyTree k=new MyTree("K");
a.setLtree(b);
a.setRtree(c);
b.setLtree(d);
b.setRtree(e);
d.setLtree(h);
h.setRtree(k);
c.setLtree(f);
c.setRtree(g);
f.setLtree(i);
g.setRtree(j);
//前序遍历算法 ABDHKECFIGJ
public static void pre(MyThreadTree myTree){
if(myTree==null){
return;
}
System.out.print(myTree.getData());
pre(myTree.getLtree());
pre(myTree.getRtree());
}