从预订中重建BST,逻辑错误

时间:2014-08-01 05:21:17

标签: recursion tree binary-search-tree preorder

试着解决如何纠正我的代码问题。我有这个想法,但在实施过程中我遇到了困难。

当我单步执行下面的代码时,我可以从预订遍历中重构部分BST。但在某些时候,我会有函数调用,如:

recon(preOrd,2,2) 

导致未分配叶子。我还知道如何纠正这个问题。

我已经看到了关于这个话题的其他主题,但是想解决我的问题,这样我才能真正学会重建BST的这个概念。

public static Node recon(int[] preOrd,int start,int end){

if (start==end){
        return null;
    }
    Node root = new Node (preOrd[start]);   
    int div=start;
    for (i=start+1;i<=end && preOrd[i]<preOrd[start];i++){ 
        div=i;
    }
Node left= reconstruct(preOrd,start+1,div);
Node right= reconstruct(preOrd,div+1,end);

root.setLeft= left;
root.setRight=right;
    return root;
}

1 个答案:

答案 0 :(得分:0)

事实证明这非常简单。只需要纠正我对叶节点更新的想法..

public static Node recon(int[] preOrd,int start,int end){
    Node root = new Node (preOrd[start]);//declare the new node      
    if (start>end){ //this is illegal, so return null 
            return null;
        }
    if (start==end){
            return root;
        }  
        int div=start;
        for (int i=start+1;i<=end preOrd[i]<preOrd[start];i++){ 
            div=i;
        }
    Node left= reconstruct(preOrd,start+1,div);
    Node right= reconstruct(preOrd,div+1,end);

    root.setLeft= left;
    root.setRight=right;
    return root;
    }