看了一下网上二叉树实现都是数据结构中的C/C++递归实现,或者是用java非递归实现。
由于java没有C++二级指针和引用传值,所以在函数中调用引用对象并且改变它,必须
return一个引用对象,这个引用对象就是函数中改变值的对象。代码如下:
public class Test {
//
class node{//定义内部类
public int data;
public node lchild;
public node rchild;
public node(int data)
{
this.data=data;
lchild=null;
rchild=null;
}
}
node root=null;
int[] input=new int[]{1,2,4,0,0,5,0,0,3,0,0};//初始化输入流为0是返回NULL
int i=0;
//BiTree前序遍历创建,返回被改变的node对象
public node creatTree(node h)
{ int data=input[i++];
if(data==0)
{
return null;
}
h=new node(data);
h.lchild=creatTree(h.lchild);
h.rchild=creatTree(h.rchild);
return h;
}
public void printTree(node h)
{
if(h==null)
return;
System.out.print(h.data);
printTree(h.lchild);
printTree(h.rchild);
}
public void printTree1(node h)
{
if(h==null)
return;
printTree1(h.lchild);
System.out.print(h.data);
printTree1(h.rchild);
}
/**
* @param args
*/
public static void main(String[] args)
{
Test test=new Test();
test.root=test.creatTree(test.root);
test.printTree1(test.root);
}
}
采用递归必然会破坏java面向对象的编程风格,所以一般才用封装的方法将以上递归实现添加private标签
定义一个同名的public方法,示例如下:
public void printTree()
{
printTree(root);
}
private void printTree(node h)
{
if(h==null)
return;
System.out.print(h.data);
printTree(h.lchild);
printTree(h.rchild);
}
这样对外调用的只有printTree()这个函数,很好保留面向对象风格