JZ23 劍指offer 二叉搜尋樹的後序遍歷序列

2021-10-13 15:33:32 字數 712 閱讀 4784

題目描述

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

class

solution

bool

dfs(vector<

int> s,

int st,

int en)

for(

int j =i;j

++j)

return

dfs(s,st,i-1)

&&dfs

(s,i,en-1)

;}};

思路:二叉搜尋樹:若它的左子樹不空,則左子樹上所有結點的值均小於它的根結點的值; 若它的右子樹不空,則右子樹上所有結點的值均大於它的根結點的值

後序遍歷:左右根遍歷順序

利用函式dfs進行遞迴遍歷,每次傳入陣列,和陣列的頭尾指標。每次遞迴先判定頭尾指標若越界則說明判斷完畢返回true,再取出陣列末尾的根節點key,根據和key比較找到左右的分界,然後判斷是否左邊小於key,右邊大於key,若不符合直接返回false。若遍歷完畢沒有返回false,說明當前位置都符合二叉搜尋樹,遞迴進行下一層,返回左右位置子樹的遞迴判定,用&&連線。

劍指 JZ23二叉搜尋樹的後序遍歷序列

題目描述 輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則輸出yes,否則輸出no。假設輸入的陣列的任意兩個數字都互不相同。解題思路 遞迴解法 樹的後序遍歷方式是左右根,比如對於遍歷序列 4,8,6,12,16,14,10 那麼就可以知道10就是根節點,前面的左子樹和右子樹需...

JZ23 二叉搜尋樹的後序遍歷

題目描述 輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則返回true,否則返回false。假設輸入的陣列的任意兩個數字都互不相同。解 該題目首先需要清楚二叉搜尋樹的概念,二叉搜尋樹 左子樹小於根節點,右子樹大於根節點 然後就是清楚後續遍歷的概念 左子樹 右子樹 根節點 那麼...

JZ23 二叉搜尋樹的後序遍歷序列

輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則返回true,否則返回false。假設輸入的陣列的任意兩個數字都互不相同。ps 我們約定空樹不是二叉搜尋樹 輸入 4,8,6,12,16,14,10 返回值 true 就是根據二叉樹後序遍歷結果判斷是不是 bst。結合他倆的特點...