題目描述
輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則返回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。結合他倆的特點...