題目:輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則返回true,否則返回false。假設輸入的陣列的任意兩個數字都互不相同。
例如輸入陣列,則返回true,如果輸入的陣列是,則返回false。
思路:
因為該序列的最後一位肯定是二叉搜尋樹的根結點,並且前面的序列為根結點的左子樹,比根結點小,後面的序列為根結點的右子樹,比根結點大。
所以可以從頭遍歷該序列直到找到比根結點大的下標,然後從該下標開始遍歷到length-1,如果有乙個數比根結點小則返回false,如果都比根結點大則遞迴判斷左右子樹,左右子樹都符合條件才返回true;
**如下:
#includeusing測試**及執行結果:namespace
std;
bool isorder(int *data,int
length)
//儲存根節點值
int root=data[length-1
];
//找到第乙個大於根節點的值,往後的值都大於根節點,否則返回false
int i=0
;
for(;i1;i++)
for(int j=i+1;j1;j++)
//如果存在左子樹,則遞迴判斷左子樹
bool left=true
;
if(i>0
)
//如果存在右子樹,遞迴判斷右子樹
bool right=true
;
if(i1
)
return left&&right;
}
intmain()
; cout
<
是否是二叉搜尋樹的後序遍歷:
"<
true
":"false
")<
return0;
}
二叉搜尋樹的後序遍歷
二叉搜尋樹的後序遍歷序列中,最後乙個值是根結點,前面比根節點小的是左結點,後面比根結點大的是右結點。include include bool verifysquenceofbst int sequence,int length int root sequence length 1 int i 0 在...
二叉搜尋樹的後序遍歷
描述 輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷。如果是,則輸出yes,否則輸出no。假設輸入的陣列的任意兩個數字都互不相同。1 樣例輸入 5 7 6 9 11 10 8 1 樣例輸出 yes 2 樣例輸入 7 4 6 5 2 樣例輸出 no 首先要知道二叉搜尋樹的定義 或者是一棵空樹...
二叉搜尋樹的後序遍歷
輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則輸出yes,否則輸出no。假設輸入的陣列的任意兩個數字都互不相同。思路採用遞迴方法 include include includeusing namespace std bool core vectorsequence,int ...