【发布时间】:2018-09-28 01:10:52
【问题描述】:
我在插入二叉树时遇到问题,以下代码似乎无法按我想要的方式工作。
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
我找不到哪里出错了。任何帮助将不胜感激。
【问题讨论】:
-
请在pastebin.com 或ide.geeksforgeeks.org 上发布您的完整代码,因为我看不到上面的代码段试图做什么。
-
上面的代码段正在获取输入中的值,它应该通过将第一个设置作为根,从这些值构造二叉树,然后构建其余的返回真值,其中如果它添加了它。如果它得到一个重复,它不会做任何事情,它只会返回 false,因为它没有插入值。我确信问题出在 if 语句的某个地方,但由于我的技能有限,我无法看到它。所有这些都需要在保持树有序的同时实现。
-
你的意思是要制作二叉搜索树?
-
是的,先生。我想这就是我要找的。span>
-
从上面的代码中我可以推断出你在每次插入时也会将 o/p 设为 false。我可能猜错了,这完全取决于您所做的实现。所以请粘贴整个代码类,以便提供更广泛的图片。
标签: java methods binary-tree inorder