判斷整數序列是不是二元查詢樹的後序遍歷結果

2021-08-15 15:17:43 字數 1019 閱讀 9870

判斷整數序列是不是二元查詢樹的後序遍歷結果

題目:輸入乙個整數陣列,判斷該陣列是不是某二元查詢樹的後序遍歷的結果。

如果是返回true,否則返回false。

例如輸入5、7、6、9、11、10、8,由於這一整數序列是如下樹的後序遍歷結果:

8/ \

6 10

/ \ / \

5 7 9 11

因此返回true。

如果輸入7、4、

6、5,沒有哪棵樹的後序遍歷的結果是這個序列,因此返回

false

。說完題目要求,我們就來談談解題思路吧。

首先呢我們講一下什麼是後序遍歷:

後序遍歷首先遍歷左子樹,然後遍歷右子樹,最後訪問根結點,在遍歷左、右子樹時,仍然先遍歷左子樹,然後遍歷右子樹,最後遍歷根結點。

這樣就可以總結出後序遍歷的特點:最後乙個必是根節點,根據二叉查詢樹的特性,左子樹的值小於根節點,右子樹的值大於根節點,找到第乙個比根節點大的樹,這就是左右子樹的分界點,然後分為兩個子串行,對子序列在進行上述操作,即進行遞迴。

下面是**部分:

#includeusing namespace std;

void test(int a,int start,int last, bool &flag)

//判斷是否符合後序遍歷

for(int j=left;j}

//左右子數列遞迴

test(a,0,left-1,flag);

test(a,left,last-1,flag);}}

int _tmain(int argc, _tchar* argv)

; test(a,0,6,flag);

if(flag) cout<<"ok"

test(b,0,3,flag);

if(flag) cout<<"yes"

return 0;

}

判斷整數序列是不是二元查詢樹的後序遍歷結果

二叉查詢樹 binary search tree 或者是一棵空樹,或者是具有下列性質的二叉樹 若它的左子樹不空,則左子樹上所有結點的值均小於它的根結點的值 若它的右子樹不空,則右子樹上所有結點的值均大於它的根結點的值 它的左 右子樹也分別為二叉排序樹。post order 先訪問左節點,再訪問右節點...

判斷整數序列是不是二元查詢樹的後序遍歷結果

第9題 判斷整數序列是不是二元查詢樹的後序遍歷結果 題目 輸入乙個整數陣列,判斷該陣列是不是某二元查詢樹的後序遍歷的結果。如果是返回true,否則返回false。例如輸入5 7 6 9 11 10 8,由於這一整數序列是如下樹的後序遍歷結果 8 6 10 5 7 9 11 因此返回true。如果輸入...

判斷整數序列是不是二元查詢樹的後序遍歷結果

二叉樹 遍歷 一 題目 感謝 提供的題目 判斷整數序列是不是二元查詢樹的後序遍歷結果 輸入乙個整數陣列,判斷該陣列是不是某二元查詢樹的後序遍歷的結果。如果是返回true,否則返回false。例如 輸入5 7 6 9 11 10 8,由於這一整數序列是如下樹的後序遍歷結果 8 6 10 5 7 9 1...