二叉搜尋樹的後序遍歷

2021-07-05 19:34:07 字數 1567 閱讀 4063

//描述:輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷。

// 如果是,則輸出yes,否則輸出no。假設輸入的陣列的任意兩個數字都互不相同。

//1-樣例輸入:5 7 6 9 11 10 8

//1-樣例輸出:yes

//2-樣例輸入:7 4 6 5

//2-樣例輸出:no

首先要知道二叉搜尋樹的定義:

或者是一棵空樹,或者具有以下性質的二叉樹:

1) 若它的左子樹不空,則左子樹所有節點的值均小於它的根節點的值;

2)若它的右子樹不空,則右子樹所有節點的值均大於它的根節點的值;

3)它的左右子樹也分別為二叉排序樹。

後序遍歷的定義為:

l–>r–>n

滿足後序遍歷的二叉搜尋樹 數列可以分為三段:

小於根、大於根,根

分別對應的左、右子樹又滿足上述規律。適用於遞迴演算法

演算法:

找到左右子樹的分界點,再繼續遞迴判斷,直到不滿足條件或者判斷完成退出。

**:

if (low>=high)

return

1; //空的二叉樹或者只有根

for (i=low;dat[i]//判斷左子樹終點 大於i的部分除了根節點,為右子樹

high1=i;

while(iif (dat[i]//右子樹部分要都大於根節點才滿足條件

return

0; i++; //右子樹滿足條件,繼續判斷

}flag=jude_afterbinarytree(dat,1,high1-1); //判斷左子樹

if (flag)

flag=jude_afterbinarytree(dat,high1,high-1); //判斷右子樹

return flag;

其中low和high表示每次遞迴時,陣列判斷的開始與結束位置;high1記錄了判斷中途左右子樹的分界點;

root為根節點的大小

程式執行結果:

2015/10/26 程式改進:

if (low>=high)

return

1; //只有根

else{

int i,j;

for (i=low;i//判斷左子樹終點 大於i的部分除了根節點,為右子樹

if (dat[i]>=dat[high])

break;

for (j=i;jif (dat[j]return

0; return jude_afterbinarytree(low,i-1)*jude_afterbinarytree(i,high-1);

二叉搜尋樹的後序遍歷

二叉搜尋樹的後序遍歷序列中,最後乙個值是根結點,前面比根節點小的是左結點,後面比根結點大的是右結點。include include bool verifysquenceofbst int sequence,int length int root sequence length 1 int i 0 在...

二叉搜尋樹的後序遍歷

輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則輸出yes,否則輸出no。假設輸入的陣列的任意兩個數字都互不相同。思路採用遞迴方法 include include includeusing namespace std bool core vectorsequence,int ...

二叉搜尋樹的後序遍歷

題目 輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則輸出yes,否則輸出no。假設輸入的陣列的任意兩個數字都互不相同。二叉搜尋樹定義 二叉查詢樹 binary search tree 又 二叉搜尋樹,二叉排序樹 它或者是一棵空樹,或者是具有下列性質的二叉樹 若它的左子樹不空...