gpt4 book ai didi

java - 插入二叉树问题的方法

转载 作者:行者123 更新时间:2023-12-02 10:46:18 25 4
gpt4 key购买 nike

我在插入二叉树时遇到问题,以下代码似乎无法按照我想要的方式工作。

  public static <E extends Comparable<? super E>>
boolean inorderInsert(BTree<E> T, E x) {

BTreeNode<E> n = T.getRoot();
if(T.getRoot() == null) {
T.setRoot(new BTreeNode<E>(x));
}


while (n != null) {
if (x.compareTo(n.getElement()) == 0)
return false;
else if (x.compareTo(n.getElement()) < 0)
if(n.getLeftChild()==null) {
n.setLeftChild(new BTreeNode<E> (x));
}
if(n.getLeftChild()!=null) {
n=n.getLeftChild();
}
else
if(x.compareTo(n.getElement()) > 0) {
if(n.getRightChild()==null) {
n.setRightChild(new BTreeNode<E> (x));
}
if(n.getRightChild()!=null ) {
n=n.getRightChild();
}
}
} // while
return true;

}

具有以下输入:

             10 3 8 4 10 5 5 18 19 13 

代码产生以下输出:

             3 4 5 13 18 19 8 10  

而不是:

             3 4 5 8 10 13 18 19 10 

我正在考虑以这样的方式制作一棵树:

                         10
__/ \__
3 18
\ / \
8 13 19
/
4
\
5

我找不到我哪里出错了。任何帮助将不胜感激。

最佳答案

当我检查代码时,我发现了问题所在,这段代码产生了预期的结果。

    boolean inorderInsert(BTree<E> T, E x) {
BTreeNode<E> n = T.getRoot();
if(T.getRoot() == null) {
T.setRoot(new BTreeNode<E>(x));
}


while (n != null) {
if (x.equals(n.getElement()))
return false;
else if (x.compareTo(n.getElement()) < 0)
if (n.getLeftChild() == null) {
n.setLeftChild(new BTreeNode<E>(x));
return true;
}
else
n = n.getLeftChild();
else if (n.getRightChild() == null){
n.setRightChild(new BTreeNode<E>(x));
return true;
}
else
n = n.getRightChild();
}
return false;
}

关于java - 插入二叉树问题的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52546970/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com