演算法學習 合法二叉搜尋樹

2021-10-06 06:31:35 字數 1264 閱讀 9970

實現乙個函式,檢查一棵二叉樹是否為二叉搜尋樹。

二叉搜尋樹性質:根節點的值大於左子樹所有節點的值,小於右子樹所有節點的值。

一般二叉搜尋樹的遍歷分成以下幾種:

前序遍歷:根結點 —> 左子樹 —> 右子樹

中序遍歷:左子樹—> 根結點 —> 右子樹

後序遍歷:左子樹 —> 右子樹 —> 根結點

層次遍歷:從上到下,從左到右。

結合定義我們知道只要在中序遍歷時判斷值是不是連續的公升序排列即可。

但是博主作為乙個小白,並不熟悉樹的遍歷

第乙個想法是從定義入手,去判斷子節點當前節點的值

乍一看這樣的做法沒什麼問題,其實是有問題的,看下圖。

在判斷 ⑤ 這個節點時沒有問題,但是在判斷 ③ 這個節點時,雖然滿足左子節點小於當前節點右子節點大於當前節點,但是 6 卻大於 5 ,也就是右子節點大於了右父節點,出現了問題。

所以這個思路,當時博主已經沒有向下去思考了,因為這明顯不符合做演算法的乙個思路。

然後博主繼續思考,那麼以當前節點父節點去比較呢?

看下面的圖:

當前節點父節點比較時,需要找出最小右父節點,和最大左父節點,也就是邊界。

從上圖舉例

最終使用遞迴辦法實現整個演算法,實際上應用了層次遍歷

**如下

class

solution

};

Leetcode 合法二叉搜尋樹

實現乙個函式,檢查一棵二叉樹是否為二叉搜尋樹。示例 1 輸入 2 1 3 輸出 true 示例 2 輸入 5 1 4 3 6 輸出 false 解釋 輸入為 5,1,4,null,null,3,6 根節點的值為 5 但是其右子節點值為 4 利用搜尋樹的中序遍歷為公升序的特性來判斷樹的合法性 如果中序...

演算法學習 二叉樹

概念 樹中的元素叫做節點 連線相鄰的節點之間的關係叫父子關係 節點a節點是b節點的父節點,b節點是a節點的子節點。c,d單個節點的父節點是同乙個節點,所以他們互稱為兄弟節點 把沒有父節點的節點叫做根節點 沒有子節點的節點叫做葉子節點或者葉節點 樹節點的高度 節點到葉子節點的最長路徑 邊數 節點的深度...

演算法學習 平衡二叉樹

輸入一棵二叉樹的根節點,判斷該樹是不是平衡二叉樹。如果某二叉樹中任意節點的左右子樹的深度相差不超過1,那麼它就是一棵平衡二叉樹。看到題目,第一時間看到二叉樹的深度定義為 從根節點到葉節點依次經過的節點 含根 葉節點 形成樹的一條路徑,最長路徑的長度為樹的深度。具體可以去看二叉樹的深度 當學會了如何求...