6.二元查找树的后序遍历结果[PostOrderOfBST]
生活随笔
收集整理的這篇文章主要介紹了
6.二元查找树的后序遍历结果[PostOrderOfBST]
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
【題目】
輸入一個整數數組,判斷該數組是不是某二元查找樹的后序遍歷的結果。如果是返回true,否則返回false。
例如輸入5、7、6、9、11、10、8,由于這一整數序列是如下樹的后序遍歷結果:
?????????8
???????/??\
??????6????10
??? / \????/ \
???5???7???9??11
因此返回true。
如果輸入7、4、6、5,沒有哪棵樹的后序遍歷的結果是這個序列,因此返回false。
【思路】
在后續遍歷得到的序列中,最后一個元素為樹的根結點。從頭開始掃描這個序列,比根結點小的元素都應該位于序列的左半部分;從第一個大于跟結點開始到跟結點前面的一個元素為止,所有元素都應該大于跟結點,因為這部分元素對應的是樹的右子樹。根據這樣的劃分,把序列劃分為左右兩部分,我們遞歸地確認序列的左、右兩部分是不是都是二元查找樹。
【代碼】
C++ Code?| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | ? | bool?VerifySequenceOfBST(int?a[],?int?n) { ????if?(NULL?==?a?||?n?<?0) ????????return?false; ????//if?(n==1) ????//return?true; ????int?root?=?a[n?-?1]; ????int?i?=?0; ????for?(;?i?<?n?-?1;?i++) ????{ ????????if?(a[i]?>?root) ????????????break; ????} ????int?j?=?i; ????for?(;?j?<?n?-?1;?j++) ????{ ????????if?(a[j]?<?root) ????????????return?false; ????} ????bool?left?=?true; ????if?(i?>?0) ????????left?=?VerifySequenceOfBST(a,?i); ????bool?right?=?true; ????if?(i?<?n?-?1) ????????right?=?VerifySequenceOfBST(a?+?i,?n?-?1?-?i); ????return?(left?&&?right); } |
?【參考】
http://zhedahht.blog.163.com/blog/static/25411174200725319627/
轉載于:https://www.cnblogs.com/hellogiser/p/3738437.html
總結
以上是生活随笔為你收集整理的6.二元查找树的后序遍历结果[PostOrderOfBST]的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PHP (20140519)
- 下一篇: 设置tomcat 编译文件位置【转】