void CreateTree(TreeNode node, char data[], Index index) {
if (data[index.GetIndex()] == '#')
node = null;
else {
node = new TreeNode();
node.data = data[index.GetIndex()];
if (root == null)
root = node;
index.AddIndex();
CreateTree(node.lnode, data, index);
CreateTree(node.rnode, data, index);
}
}这是一段递归建树的代码,就是把数组data转成树,在这里root的子树结果都为null,为什么?

解决方案 »

  1.   

    初步看了一下,好像楼主的树形中的rnode都为空,lnode有值??
      

  2.   

    确实为空,但是在递归的时候传递的Node地址,然后在new的时候赋值啊。为什么为空?
      

  3.   

    明白了,因为Java的地址传递也是个假的,它传递的是地址的拷贝。
      

  4.   

    注意:你的node = new TreeNode()是在else{}中的
      

  5.   

    注意:你的node = new TreeNode()是在else{}中的
      

  6.   

    注意:你的node = new TreeNode()是在else{}中的
      

  7.   

    index.GetIndex(),这个取得是索引的当前位置??
    index.AddIndex(),将当前索引登记??
    如果是如上,那么在执行
    CreateTree(node.lnode, data, index);
    遍历 lnode时,data就将被遍历完,也就是rnode便利时将执行如下
    if(data[index.GetIndex()] == '#') 
    node = null; 
    GetIndex()获得的都是最后一个数据值'#',也就是rnode获取的都是空值