请问这个二叉树插入哪里错了,为什么遍历时候只有根节点

慕容天河 2016-11-30 11:57:01
package com.test;

public class BinaryTree {
int data;
BinaryTree left;
BinaryTree right;
public BinaryTree(int data,BinaryTree left,BinaryTree right){
this.data = data;
this.left = left;
this.right = right;
}
public void insert(int data,BinaryTree t){
if(t == null){
t = new BinaryTree(data, null, null);
}else{
if(data > t.data){
insert(data,t.right);
}else if(data < t.data){
insert(data,t.left);
}
}
}
}
难道没有插入成功吗
...全文
300 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
慕容天河 2016-12-01
  • 打赏
  • 举报
回复
引用 7 楼 cmmchenmm 的回复:
[quote=引用 5 楼 qq_36095810 的回复:] [quote=引用 4 楼 cmmchenmm 的回复:] 楼主你insert的时候到了最后当为空的时候你才开始真正进行插入操作,但是你没有让插入节点的父亲节点left,或者right指向你这个新的节点。
我感觉每次递归的时候,判断t是否为null,这个t就是指父节点的right或left啊。如果为空,直接将这个right或者left赋为new BinaryTree。[/quote] 这个参数应该不是指针吧 楼主可以试一下

//当我往左子树插入时
if(i.letf==null){
i.left=new tree(data,null,null);
}else{
inser(data,i.left);
}
[/quote] 是不是可以这样理解:只是给空节点赋了值,但是没有把这个新节点跟父节点连接起来
NewshiJ 2016-12-01
  • 打赏
  • 举报
回复
c
引用 8 楼 qq_36095810 的回复:
[quote=引用 7 楼 cmmchenmm 的回复:] [quote=引用 5 楼 qq_36095810 的回复:] [quote=引用 4 楼 cmmchenmm 的回复:] 楼主你insert的时候到了最后当为空的时候你才开始真正进行插入操作,但是你没有让插入节点的父亲节点left,或者right指向你这个新的节点。
我感觉每次递归的时候,判断t是否为null,这个t就是指父节点的right或left啊。如果为空,直接将这个right或者left赋为new BinaryTree。[/quote] 这个参数应该不是指针吧 楼主可以试一下

//当我往左子树插入时
if(i.letf==null){
i.left=new tree(data,null,null);
}else{
inser(data,i.left);
}
[/quote] 是不是可以这样理解:只是给空节点赋了值,但是没有把这个新节点跟父节点连接起来[/quote] 对差不多就是这个意思
慕容天河 2016-11-30
  • 打赏
  • 举报
回复
引用 1 楼 Eoss_v 的回复:
public void insert(int data,BinaryTree t){ if(t == null){ t = new BinaryTree(data, null, null); }else{ if(data > t.data){ insert(data,t.right); }else if(data < t.data){ insert(data,t.left); } 你这里怎么能用递归呢?你这里递归的话t.right永远都是null,你这个会栈溢出的,还可能OOM
请问能不能说得具体一点,我也知道递归用错了,但是具体逻辑上哪里出了问题,一直想不出来。
杨扬扬 2016-11-30
  • 打赏
  • 举报
回复
public void insert(int data,BinaryTree t){ if(t == null){ t = new BinaryTree(data, null, null); }else{ if(data > t.data){ insert(data,t.right); }else if(data < t.data){ insert(data,t.left); } 你这里怎么能用递归呢?你这里递归的话t.right永远都是null,你这个会栈溢出的,还可能OOM
NewshiJ 2016-11-30
  • 打赏
  • 举报
回复
引用 5 楼 qq_36095810 的回复:
[quote=引用 4 楼 cmmchenmm 的回复:] 楼主你insert的时候到了最后当为空的时候你才开始真正进行插入操作,但是你没有让插入节点的父亲节点left,或者right指向你这个新的节点。
我感觉每次递归的时候,判断t是否为null,这个t就是指父节点的right或left啊。如果为空,直接将这个right或者left赋为new BinaryTree。[/quote] 这个参数应该不是指针吧 楼主可以试一下

//当我往左子树插入时
if(i.letf==null){
i.left=new tree(data,null,null);
}else{
inser(data,i.left);
}
萧乡月夜 2016-11-30
  • 打赏
  • 举报
回复
才20分哦
慕容天河 2016-11-30
  • 打赏
  • 举报
回复
引用 4 楼 cmmchenmm 的回复:
楼主你insert的时候到了最后当为空的时候你才开始真正进行插入操作,但是你没有让插入节点的父亲节点left,或者right指向你这个新的节点。
我感觉每次递归的时候,判断t是否为null,这个t就是指父节点的right或left啊。如果为空,直接将这个right或者left赋为new BinaryTree。
NewshiJ 2016-11-30
  • 打赏
  • 举报
回复
楼主你insert的时候到了最后当为空的时候你才开始真正进行插入操作,但是你没有让插入节点的父亲节点left,或者right指向你这个新的节点。
慕容天河 2016-11-30
  • 打赏
  • 举报
回复
求解答求解答

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧