二叉搜尋樹的後序遍歷

2022-08-29 01:12:06 字數 1048 閱讀 9232

題目:輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則返回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;

}

測試**及執行結果:

int

main()

; 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 ...