面試題33 二叉搜尋樹的後序遍歷序列

2021-10-11 07:22:08 字數 1393 閱讀 9302

題目:輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷結果。如果是則返回 true,否則返回 false。假設輸入的陣列的任意兩個數字都互不相空間

思路:由於題目沒有給出二叉樹長什麼樣子,只給了乙個陣列,所以我們要從陣列中找到二叉搜尋樹後序序列的規律。

後序序列的最後乙個元素是樹的根結點,因此,可以再陣列中找到乙個劃分,根結點的左子樹的值都比根結點小,右子樹的值都比根結點大,用這個思路(左大右小)就可以不斷遞迴判斷子樹是不是二叉搜尋樹了。

class

solution

public

static

boolean

checksub

(int

postorder,

int start,

int end)

int pivot = postorder[end]

;// pivot 記錄最後乙個元素

int pivotindex = start;

// pivotindex 用於記錄分界線的下標

// 找到第乙個大於 pivot 的數的下標,等號保留,可能是單邊樹

while

(pivotindex <= end && postorder[pivotindex]

< pivot)

for(

int i = pivotindex; i <= end; i++)}

return

checksub

(postorder, start, pivotindex -1)

&&checksub

(postorder, pivotindex, end -1)

;}}

同樣的方法,網友寫的**看起來也太舒服了

class

solution

public

static

boolean

recur

(int

postorder,

int start,

int end)

int pivotindex = start;

while

(postorder[pivotindex]

< postorder[end]

)int temp = pivotindex;

while

(postorder[temp]

> postorder[end]

)return temp == end &&

recur

(postorder, start, pivotindex -1)

&&recur

(postorder, pivotindex, end -1)

;}}

劍指 面試題33 二叉搜尋樹的後序遍歷

題目 輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷結果。如果是則返回 true,否則返回 false。假設輸入的陣列的任意兩個數字都互不相同。思路 1 遞迴判斷左右子樹是不是二叉搜尋樹。2 輸入序列的最後乙個元素是二叉搜尋樹的根節點,前面的可分為左右子樹,其中左子樹小於根節點,右子樹大於...

面試題33 二叉搜尋樹的後序遍歷序列(基本沒思路)

一 題目 輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則返回true,否則返回false。假設輸入的陣列的任意兩個數字都互不相同。二 關鍵 1.遞迴思想。2.分組和分組依據 最後乙個是根節點 比根小的是左子樹,比根大的是右子樹 三 解釋 1.解題依據 在後序遍歷得到的序列中...

面試題33 二叉搜尋樹的後序遍歷序列 遞迴法

採用先序遍歷 自頂向下的方式 分解原問題。本題的關鍵點在於,如果劃分左 右子樹和根節點。由於題目假定陣列為後序遍歷,存在如下規律 最後乙個節點必為根節點 區間從左到右,第乙個大於根節點的值為右子樹的根節點。以上述兩點可以劃分左 右子樹和根節點。依據左 右子樹不斷的遞迴求解。返回條件 區間長度小於1時...