二叉搜尋樹的後序遍歷序列

2021-12-29 21:37:41 字數 1446 閱讀 2163

【題目】

輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則返回true,否則返回false。假設輸入的陣列的任意兩個數字都各不相同。

【分析】

假設輸入陣列{5,7,6,9,11,10,8}要判斷它是不是二叉搜尋樹的後序遍歷結果,就要結合二叉搜尋樹特點及後序遍歷的方法來判斷,後序遍歷特點是陣列最後乙個就是二叉樹的根節點,所以由此判斷樹根結點為8,並且先遍歷左子樹,再遍歷右子樹,所以關鍵在於判斷出左子樹右子樹分界點在**。由二叉搜尋樹左子樹小於根節點,右子樹大於根節點的特點就可以找到分界點,{5,7,6}皆小於根節點8,所以其為左子樹,而{9,11,10}大於根節點,所以為右子樹,對左子樹,右子樹分別利用上述判斷方法繼續判斷即可,一旦右子樹**現小於根節點的,則說明此陣列並非為某二叉搜尋樹的後序遍歷結果。

舉一範例:

1. 樹根節點為5;

2. 陣列第乙個元素不小於5,說明樹沒有左子樹,只有右子樹;

3. 對於{7,4,6}都是右子樹結點,理應全都大於5,但是4的存在直接就可以判定,此陣列不為後序遍歷結果。

【測試**】

#include

#include

#define false 0

#define true 1

bool verifysequenceofbst( int sequence[ ], int length )

//在二叉搜尋樹中右子樹的結點大於根結點

int j = i;

for(; j < length - 1 ; ++j )

//判斷左子樹是不是二叉搜尋樹

bool left = true;

if( i > 0 )

left = verifysequenceofbst( sequence, i );

//判斷右子樹是不是二叉搜尋書

bool right = true;

if( i < length - 1)

right = verifysequenceofbst( sequence + i, length - i - 1 );

return left & right;

}void main( )

; if( verifysequenceofbst( s, 7 ))

printf("存在一棵二叉搜尋書,其後序遍歷結果為\n");

else

printf("不存在一棵二叉搜尋書,其後序遍歷結果為\n");

int s2[ ] = ;

if( verifysequenceofbst( s2,7 ))

printf("存在一棵二叉搜尋書,其後序遍歷結果為\n");

else

printf("不存在一棵二叉搜尋書,其後序遍歷結果為\n");

}【輸出】

二叉搜尋樹的後序遍歷序列

題目 輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是返回true,否則返回false。假設輸入的陣列的任意兩個數字都不相同。解答 二叉搜尋樹後序遍歷最後訪問的是根節點,根據根節點將陣列分成兩部分,前面一部分即左子樹值小於根節點值,後面一部分即右子樹的值大於根節點 再遞迴的檢查...

二叉搜尋樹的後序遍歷序列

輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則輸出yes,否則輸出no。假設輸入的陣列的任意兩個數字都互不相同。include using namespace std bool verifysquenceofbst int sequence,int length int j...

二叉搜尋樹的後序遍歷序列

輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則輸出yes,否則輸出no。假設輸入的陣列的任意兩個數字都互不相同。class solution 在二叉搜尋樹中右子樹的結點大於根結點 int j i for j0 left verifysquenceofbst lefttree...