java中多叉树(tree)的生成与显示


    先看看多叉树的表示吧。

一. 多叉树的表示:

    由于要表示多个孩子,不能像二叉树那样一个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()就可以打印出来了。


版权声明:本文为博主原创文章,未经博主允许不得转载。

posted @ 2011-09-15 11:57  wangicter的博客  阅读(5654)  评论(0编辑  收藏  举报