40講系列5 二叉樹 二叉搜尋樹

2022-06-08 01:57:10 字數 1796 閱讀 4330

二分搜尋樹:

1. 每個節點的鍵值大於左孩子;

2. 每個節點的鍵值小於右孩子;

3. 以左右孩子為根的子樹仍為二分搜尋樹。

對於二分搜尋樹,要求掌握 插入、 查詢、 刪除 基本操作,以及

查詢最大值、最小值;

給定乙個資料,尋找前驅和後繼,以及上界和下界

某個元素的排名rank

尋找第k大或小元素select

思路:中序遍歷時,判斷當前節點是否大於中序遍歷的前乙個節點,如果大於,滿足bst,繼續遍歷;否則返回false。

中序遍歷(遞迴):

class

solution

//訪問當前節點,如果當前節點<=中序遍歷的前乙個節點,直接返回false

if (pre != null && pre.val >=root.val)

pre =root;

//訪問右子樹

return

isvalidbst(root.right);

}}

中序遍歷(非遞迴):

class

solution

root =stack.pop();

if (pre != null && pre.val >=root.val)

pre =root;

root =root.right;

}return

true

; }

}

class

solution

}

class

solution

if (p.val > root.val && q.val >root.val)

return root; // 對應三種情況

*///

非遞迴寫法

while (root != null

)else

if (p.val > root.val && q.val >root.val)

else

}return

null

; }

}

第一組:leetcode104. 二叉樹的最大深度

、leetcode111. 二叉樹的最小深度

第二組:leetcode226. 翻轉二叉樹

、leetcode100. 相同的樹

、leetcode101. 對稱二叉樹

、leetcode222. 完全二叉樹的節點個數

、leetcode110. 平衡二叉樹

第三組:leetcode112. 路徑總和、leetcode404. 左葉子之和

第四組:leetcode257. 二叉樹的所有路徑

、leetcode113. 路徑總和 ii

、leetcode129. 求根到葉子節點數字之和

、leetcode222. 完全二叉樹的節點個數

、leetcode437. 路徑總和 iii

leetcode783. 二叉搜尋樹節點最小距離、leetcode235. 二叉搜尋樹的最近公共祖先、leetcode98. 驗證二叉搜尋樹、leetcode450. 刪除二叉搜尋樹中的節點、leetcode108. 將有序陣列轉換為二叉搜尋樹、leetcode109. 有序鍊錶轉換二叉搜尋樹、leetcode230. 二叉搜尋樹中第k小的元素、leetcode236. 二叉樹的最近公共祖先、leetcode530. 二叉搜尋樹的最小絕對差

二叉樹 還原二叉樹 二叉搜尋樹

先序遍歷的特點 先遍歷根結點,再遍歷左子樹,最後再遍歷右子樹 中序遍歷的特點 先遍歷左子樹,再遍歷根結點,最後再遍歷右子樹 後序遍歷的特點 先遍歷左子樹,再遍歷右子樹,最後再遍歷根結點 舉例 先序遍歷 a b d f g h i e c 中序遍歷 f d h g i b e a c 如上,根據先序遍...

樹 二叉樹 二叉搜尋樹

給定乙個二叉樹,判斷其是否是乙個有效的二叉搜尋樹。假設乙個二叉搜尋樹具有如下特徵 節點的左子樹只包含小於當前節點的數。節點的右子樹只包含大於當前節點的數。所有左子樹和右子樹自身必須也是二叉搜尋樹。示例 1 輸入 2 13輸出 true 示例 2 輸入 5 14 3 6輸出 false 解釋 輸入為 ...

排序二叉樹or搜尋二叉樹or查詢二叉樹

排序二叉樹,搜尋二叉樹,查詢二叉樹都是乙個意思,只是叫法不同而已。下面的文章中我們統稱為排序二叉樹。本文主要是針對高中資訊學,因此其中不涉及到指標,所有需要用指標的地方都直接使用陣列進行模擬。排序二叉樹定義 1 若左子樹不空,則左子樹上所有結點的值均小於或等於它的根結點的值 2 若右子樹不空,則右子...