輸入一個整數數組,判斷該數組是不是某二叉搜索樹的后序遍歷的結果。如果是則返回true,否則返回false。假設輸入數組的任意兩個數組都互不相同。
創新互聯公司專注于綠春網站建設服務及定制,我們擁有豐富的企業做網站經驗。 熱誠為您提供綠春營銷型網站建設,綠春網站制作、綠春網頁設計、綠春網站官網定制、微信平臺小程序開發服務,打造綠春網絡公司原創品牌,更為您提供綠春網站排名全網營銷落地服務。二叉搜索樹的特點就是每個結點的左子樹的值都比自身的值小,而右子樹的值都比自身值要大。比如如上的二叉搜索樹后序遍歷的結果就是{5,7,6,9,11,10,8},但是題意并不是給出一棵二叉搜索樹讓判斷數組是否為后序遍歷序列,而是只有一組數據讓判斷是否為某個二叉搜索樹的后序遍歷結果,因此之能依據二叉搜索樹后序遍歷結果的特點來進行分析判斷;
就拿上面的結果來說,可以發現,因為是后序遍歷,因此數組的最后一個結點一定是根結點,而因為是二叉搜索樹,所以根結點前面的部分可以分為兩塊,一塊都比根結點的值要小,因此為其左結點,而另一部分都比根結點的值要大,因此是根結點的右子樹部分,然后可以用遞歸來再對左右子樹部分進行判斷,如果不滿足上述的任一部分則返回false.....(balabalabala.......其實本來不是這個樣子的,可是都要插入結果圖片發布了突然網卡了,再恢復就發現什么都沒有了系統沒有保存,又重新開始寫,不說了心好累5555555555555555很晚了要洗洗睡了 ,直奔程序吧 T_T)
程序設計如下:
#include <iostream> using namespace std; bool JudgeIsPostOrderOfBST(int *arr, size_t start, size_t end)//名字臭長臭長的 -_- { bool ret = false; if((arr != NULL) && (start < end))//參數條件判斷 { size_t i = 0; for(; i < end; ++i)//在數組中查找第一個比根結點大的數,進行分塊 { if(arr[i] > arr[end]) break; } size_t j = i; for(; j < end; ++j)//對分塊之后的部分進行判斷,如不滿足直接返回false { if(arr[j] < arr[end]) return ret; } if(j == end)//如果滿足條件則當前狀態為true,接著就需要進行遞歸判斷左右子樹部分 ret = true; if(start < i-1) ret = JudgeIsPostOrderOfBST(arr, start, i-1); if(i < end-1) ret = JudgeIsPostOrderOfBST(arr, i, end-1); } return ret; } int main() { int arr1[] = {5,7,6,9,11,10,8}; int arr2[] = {4,5,2,6,7,3,1}; cout<<JudgeIsPostOrderOfBST(arr1, 0, sizeof(arr1)/sizeof(arr1[0]-1))<<endl; cout<<JudgeIsPostOrderOfBST(arr2, 0, sizeof(arr2)/sizeof(arr2[0]-1))<<endl; return 0; }
運行程序:
《完》
創新互聯www.cdcxhl.cn,專業提供香港、美國云服務器,動態BGP最優骨干路由自動選擇,持續穩定高效的網絡助力業務部署。公司持有工信部辦法的idc、isp許可證, 機房獨有T級流量清洗系統配攻擊溯源,準確進行流量調度,確保服務器高可用性。佳節活動現已開啟,新人活動云服務器買多久送多久。
本文標題:二叉搜索樹的后序遍歷序列——24-創新互聯
當前URL:http://vcdvsql.cn/article34/dchpse.html
成都網站建設公司_創新互聯,為您提供網站制作、靜態網站、商城網站、企業建站、域名注冊、網站內鏈
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯