2015-02-08 119 views
0

在BST预购遍历中,我看不到我期望的结果。
请帮助确认这是代码问题还是我对预序遍历如何工作的理解。BST遍历预订

节点:

class node implements Comparable<node>{ 
     int v; 
     node left; 
     node right; 
     node(int v){ this.v=v;} 
     boolean equals(node o){ 
      return(this.v==o.v); 
     } 
     @Override public int compareTo(node aThat) { 
      return this.v<aThat.v?-1:this.v>aThat.v?1:0; 
     } 
     public String toString(){ return "->" + this.v;} 
    } 

插入代码 -

public binarySearch(int r){ 
     Random rnd=new Random(); 
     int[] val=new int[r]; 
     for(int i=0;i<r;i++){ 
      val[i]=rnd.nextInt(50); 
     } 
     System.out.println("Array -> " + Arrays.toString(val)); 
     root=new node(val[0]); 
     for(int i=1;i<val.length-1;i++){ 
      insert(root,new node(val[i])); 
     } 
    } 

插入(聚集)码 -

private void insert(node curr,node c){ 
    if(curr==c){ return;} 
    if(curr.compareTo(c)<0) 
    { 
     if(curr.left==null){curr.left=c; return;} 
     insert(curr.left,c); 
    } 
    else 
    { 
     if(curr.right==null){curr.right=c; return;} 
     insert(curr.right,c); 
    } 
} 

遍历代码(预购) -

private void print(node c){ 
     if(c==null) return; 
     System.out.println(c); 
     print(c.left); 
     print(c.right); 

    } 

输入数组 -

[22, 17, 24, 11, 5, 9, 25] 

预期(?) -

->22 ->17 ->11 ->5 ->9 ->24 

输出 -

->22 ->24 ->17 ->11 ->5 ->9 

回答

1

您正在使用curr.compareTo(c)<0(意为 “ccurr更大”)作为将c放在左边的条件curr。我不确定你的意思是写什么,但这与此完全相反。 (或者翻转ccurr,或者将<更改为>,或左右交换。)

+0

比我快30秒......修正应该是这个“if”条件(在插入中)或者在实现中该方法的'的compareTo()' – alfasin 2015-02-08 04:51:06

+0

的compareTo代码是:类节点实现可比 { \t \t @覆盖公共INT的compareTo(节点aThat){ \t \t \t返回this.v aThat.v?1:0; \t \t} } – IUnknown 2015-02-08 05:11:13