试着解决如何纠正我的代码问题。我有这个想法,但在实施过程中我遇到了困难。
当我单步执行下面的代码时,我可以从预订遍历中重构部分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;
}
答案 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;
}