avatar
r*r
1
这个版本的 insert 为什么不正确? 谁能帮忙看看
public void insert1(T value){
if( root == null ){
root = new BSTNode(value);
}else
insertHelper(value, root);

}
private void insertHelper(T value, BSTNode node){
if( value.compareTo(node.value_) < 0 ){
if( node.left == null )
node.left = new BSTNode(node.value_);
else
insertHelper(value, node.left);
}else if( value.compareTo(node.value_) > 0 ){
if( node.right == null )
node.right = new BSTNode(node.value_);
else
insertHelper(value, node.right);
}else{
throw new RuntimeException("Duplicate Node : " + value.
toString());
}
avatar
d*1
2
逻辑上没什么不对吧。只不过可以不用recursive solution, 提高点效率
avatar
r*r
3
写的另一个 iterative 的,就没有问题。这个调试了很久,就是不 work. 每次只是插
入重复插入第一个值。这是把 insert 定义在 BST class 里面。下面另一个
recursive 的,把 insert 定义在 node 里面,也没问题。 贴出我的 node 定义。
谁再看看,上面那个的问题在哪里 (注意,那个 insert 定义在 BST class 里面)?
private static class BSTNode>{
private T value_;
BSTNode left;
BSTNode right;

public BSTNode(T value){
value_ = value;
left = null;
right = null;
}

public void insert(T value){
if( value.compareTo(value_) < 0 ){
if( left == null)
left = new BSTNode(value);
else
left.insert(value);
}else if( value.compareTo(value_) > 0 ){
if( right == null )
right = new BSTNode(value);
else
right.insert(value);
}
}
}

【在 d**********1 的大作中提到】
: 逻辑上没什么不对吧。只不过可以不用recursive solution, 提高点效率
avatar
b*n
4

should be value, not node.value_
same here

【在 r******r 的大作中提到】
: 这个版本的 insert 为什么不正确? 谁能帮忙看看
: public void insert1(T value){
: if( root == null ){
: root = new BSTNode(value);
: }else
: insertHelper(value, root);
:
: }
: private void insertHelper(T value, BSTNode node){
: if( value.compareTo(node.value_) < 0 ){

avatar
d*l
5
这问题还是挺明显的啊,就是4楼说的那样。新建左右子树的时候都是用的根节点的值
而非value,所以才会出现重复插入第一个值的情况

【在 r******r 的大作中提到】
: 写的另一个 iterative 的,就没有问题。这个调试了很久,就是不 work. 每次只是插
: 入重复插入第一个值。这是把 insert 定义在 BST class 里面。下面另一个
: recursive 的,把 insert 定义在 node 里面,也没问题。 贴出我的 node 定义。
: 谁再看看,上面那个的问题在哪里 (注意,那个 insert 定义在 BST class 里面)?
: private static class BSTNode>{
: private T value_;
: BSTNode left;
: BSTNode right;
:
: public BSTNode(T value){

avatar
g*r
6
right, stupid!
thx

【在 d*******l 的大作中提到】
: 这问题还是挺明显的啊,就是4楼说的那样。新建左右子树的时候都是用的根节点的值
: 而非value,所以才会出现重复插入第一个值的情况

avatar
g*r
7
i didn't see the problem for quite some time.

【在 g****r 的大作中提到】
: right, stupid!
: thx

avatar
g*s
8
bst insertion recursion should be easy ah.
the challenging part is balanced bst insertion.

【在 g****r 的大作中提到】
: right, stupid!
: thx

avatar
r*r
9
眼睛看花了。如果真的面试,是不是就挂了?

【在 d*******l 的大作中提到】
: 这问题还是挺明显的啊,就是4楼说的那样。新建左右子树的时候都是用的根节点的值
: 而非value,所以才会出现重复插入第一个值的情况

avatar
g*s
10
it depends. some interviewer are nice. some are picky. also, some companies'
bar very high.

【在 r******r 的大作中提到】
: 眼睛看花了。如果真的面试,是不是就挂了?
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。