資料結構習題 判斷是否是二叉查詢樹的字尾

2021-10-06 22:00:21 字數 1389 閱讀 1760

【問題描述】輸入乙個整數陣列,判斷該陣列是不是某二元查詢樹的後序遍歷的結果。如果是返回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。樹的高度 樹中節點的最大層次。無序樹 如果...