33が刻まれている。その後のバイナリ検索ツリートラバーサルシーケンス
一つ、タイトル説明
整数配列を入力して、アレイは、バイナリ検索ツリーをトラバースした後決意の結果ではありません。それはそうでない場合はfalse、trueを返す場合。任意の2つの数の入力配列が異なっていると仮定する。
例えば、入力配列5,7,6,9,11,10,8 {}は、図の先行結果でバイナリ検索ツリーの後に整数配列ので、trueを返し。
入力配列は{7,4,6,5}である場合、木のいずれので、配列のバイナリ検索ツリートラバーサル順序は、このようにfalseを返します。
第二に、問題分析
後順トラバーサル順序は次のとおりです。左のサブツリー - >右部分木 - >ルート(ルート最後トラバーサル)
二分探索木、ノードの左サブツリー<ルート値<ノードの右サブツリーの特性に基づいて値
アレイ} {5,7,6,9,11,10,8
上記のように、最後の番号の残りの数字をバイナリツリーのルートを通過した後、合わせたデジタルアレイと言うことができる、数が少ないルートノード(すなわち、左サブツリー部)が上面である、ルートノード(すなわち、右よりも数より大きくなりますサブツリー部分)バックです。
第三に、質問
public boolean verifySquenceOfBST(int[] sequence) {
if(sequence== null || sequence.length<=0) {
return false;
}
return verifyCore(sequence, 0, sequence.length-1);
}
private boolean verifyCore(int[] sequence,int start,int end) {
if(start >= end) {
return true;
}
//判断左子树
int mid=start;
while(sequence[mid]<sequence[end]) {
mid++;
}
//判断右子树
for(int i=mid;i<end;i++) {
if(sequence[i]<sequence[end]) {
return false;
}
}
return verifyCore(sequence, start, mid-1)&&verifyCore(sequence, mid, end-1);
}