先看看多叉树的表示吧。
一. 多叉树的表示:
由于要表示多个孩子,不能像二叉树那样一个leftchild,一个rightchild。当然你也可以选择采用孩子兄弟表示法来将多叉树转化成二叉树。但java提供了链表功能,能够允许设置不定数目的孩子,极大方便了多叉树的表示和实现。下面就是多叉树采用链表来表示孩子的表示方法:
class treenode
{
String data;
treenode parent;
LinkedList<treenode> childlist;
treenode()
{
data = null;
childlist = new LinkedList();
parent = null;
}
}
二. 多叉树的显示:
多叉树的显示是树的比较重要的一个方面,要以合理的方式进行展现出来,一般均采用深度遍历来显示。
private static void displaytree(treenode f, int level) { //递归显示树
String preStr = "";
for(int i=0; i<level; i++) {
preStr += " ";
}
for(int i=0; i<f.childlist.size(); i++) {
treenode t = f.childlist.get(i);
System.out.println(preStr + "-"+t.data);
if(! t.childlist.isEmpty()) {
displaytree(t, level + 1);
}
}
}
注意到,改程序用到了递归来深度遍历,打印上采用了缩进的方式来显示父子关系。要注意到的是,为了让该程序能打印出总的根,在树的生成时,第一个节点设置为空,其孩子节点指向你的原来的根。这样,打印出来才是完整的。
三. 多叉树的生成:
多叉树的生成是树的应用的核心。多叉树的目的就是用来表示可能拥有多孩子的树状结构。
该实现方法主要基于两个方面:
1) java对象赋值是reference关系,改变的是同一棵树;
2) current指针总是指向要进行分析的节点,以便树的生长。
大体算法如下:
whole_root = root;
current = root;
while(list != null)
{
temp = list.pop();
current.childlist.add(temp);
current = temp;
// your program
}
这样就能够生成一棵以whole_root为根的树,采用displaytree()就可以打印出来了。