插入二叉树问题的方法

时间:2018-09-28 01:10:52

标签: java methods binary-tree inorder

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

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 

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

2 个答案:

答案 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循环)将仅允许您每次迭代遍历树的单个节点,从而使结果数据结构为线性,即每个节点仅有一个孩子(换句话说,它将等同于一个列表)。

此外,我强烈建议正确缩进代码,因为这样可以更容易地准确了解代码的分支位置。