這個題我做的時候沒有繞過來彎,以為根據排序可以得到中序結構,有了後續和中序可以建立乙個樹,然後判斷這個樹是不是乙個二叉排序樹。但這個思路是錯的【問題描述】輸入乙個整數陣列,判斷該陣列是不是某二元查詢樹的後序遍歷的結果。如果是返回true,否則返回false。
【輸入形式】輸入任意長度的陣列,數字之間空格分開
【輸出形式】true 或者 false
【樣例輸入】輸入 5 7 6 9 11 10 8
【樣例輸出】true
【樣例說明】由於這一整數序列是如下樹的後序遍歷結果:
8/ \
6 10
/ \ / \
5 7 9 11
因此返回true。
【評分標準】暴力求解法不得分。
正確的思路其實很簡單:
檢測字尾表示式,最後乙個為根,搜尋樹後序遍歷陣列,從陣列頭到第乙個比根大的節點是左孩子,後面右孩子必須全大於根,遞推,如果右孩子不大於根,說明是錯的字尾遍歷
pre(int las, int start, int index)
這個函式是乙個遞迴函式,start - index是此時要遍歷的字尾範圍,index是這個範圍的根,比如5 7 6 9 11 10 8
剛開始,start = 0, index = 6
,其中las[index]為這個範圍的根
find_min(int las, int start, int index)
這個函式是要找到第乙個大於或者等於根的結點,然後用這個點來進行範圍的劃分 — 實質上就是對根進行左右子結點的拆分
到最後進行對左右子範圍的遞迴
#include
#include
intfind_min
(int las,
int start,
int index)}}
intpre
(int las,
int start,
int index)
}pre
(las, start, end -1)
;// printf("sss end = %d\n", end);
pre(las, end, index -1)
;}return1;
}int
main()
while
(getchar()
!='\n');
// printf("%d\n", l_num);if(
pre(las,
0, l_num -1)
)else
printf
("false");
return0;
}
資料結構 判斷鏈式二叉樹是否相同
本文主要描述判斷兩個鏈式二叉樹是否相同,所謂相同,結構要相同,節點的值也要相同。struct bitreenode bitreeprt typedef bitreeprt bitree struct bitreenode int like bitree t1,bitree t2 bitree t1 ...
資料結構二叉樹習題
1.問題描述 二叉樹結點值為大寫字母,輸入二叉樹的前序遍歷和中序遍歷序列,生成此二叉樹,輸出該二叉樹的後序遍歷和按層次遍歷序列。輸入某結點值,在二叉樹中查詢該結點,若該結點存在,則輸出從根到該結點的路徑,否則給出不存在資訊。2.演算法思路 樹的建立 將樹的前序序列和中序序列分別存入兩個陣列中,前序序...
(資料結構)二叉查詢樹
樹,是一種資料結構。它是由n個有限節點組成乙個具有層次關係的集合。特點 樹的基本術語 節點的度 節點擁有的子樹的數目。葉子 度為零的節點。分支節點 度不為零的節點。樹的度 樹中節點的最大的度。層次 根節點的層次為1,其餘節點的層次等於該節點的雙親的層次加1。樹的高度 樹中節點的最大層次。無序樹 如果...