我在插入二叉树时遇到问题,以下代码似乎无法按照我想要的方式工作。
cookie=[c.value for c in cj if c.name == 'csrftoken']; print(cookie)
具有以下输入内容:
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
我找不到哪里出了问题。任何帮助将不胜感激。
答案 0 :(得分:1)
当我检查代码时,发现出了什么问题,此代码产生了预期的结果。
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;
}
答案 1 :(得分:0)
从对原始问题的评论来看,您似乎想要做的是Tree Sort,通常更容易实现为递归算法,而不是迭代(while循环)。我建议看一下文献以了解有关该算法的更多信息。 当前上面代码的编写方式(迭代地,使用for循环)将仅允许您每次迭代遍历树的单个节点,从而使结果数据结构为线性,即每个节点仅有一个孩子(换句话说,它将等同于一个列表)。
此外,我强烈建议正确缩进代码,因为这样可以更容易地准确了解代码的分支位置。