LeetCode 二叉搜尋樹中第K小的元素

2021-09-11 18:55:29 字數 1475 閱讀 6213

給定乙個二叉搜尋樹,編寫乙個函式 kthsmallest 來查詢其中第 k 個最小的元素。

說明:你可以假設 k 總是有效的,1 ≤ k ≤ 二叉搜尋樹元素個數。

示例 1:

輸入: root = [3,1,4,null,2], k = 1

3/ \

1 4

\ 2

輸出: 1

示例 2:

輸入: root = [5,3,6,2,4,null,null,1], k = 3

5/ \

3 6

/ \2 4

/ 1輸出: 3

高階:

如果二叉搜尋樹經常被修改(插入/刪除操作)並且你需要頻繁地查詢第 k 小的值,你將如何優化 kthsmallest 函式?

二叉搜尋樹:中序遍歷序列嚴格遞增。

中序遍歷請翻閱 leetcode 中序遍歷

方法一:先中序遍歷二叉搜尋樹,得到中序遍歷序列,然後找到第k小的。遞迴深度為二叉樹的高度h,空間複雜度為o(n))

/**

* definition for a binary tree node.

* struct treenode

* };

*/class solution

//先遍歷左子樹

if (root->left != null)

//遍歷當前根節點

result.push_back(root->val);

//再遍歷右子樹

方法二:將尋找融入到中序遍歷中。(遞迴深度為二叉樹的高度h,空間複雜度為o(1))

/**

* definition for a binary tree node.

* struct treenode

* };

*/class solution

if (root->left == null && root->right == null)

return;

}dfsinorder(root->left, k);//先左子樹

k -= 1;//根

if (k == 0)

dfsinorder(root->right, k);//右子樹

LeetCode 二叉搜尋樹中的搜尋

給定二叉搜尋樹 bst 的根節點和乙個值。你需要在bst中找到節點值等於給定值的節點。返回以該節點為根的子樹。如果節點不存在,則返回 null。例如,給定二叉搜尋樹 4 2 7 1 3 和值 2 你應該返回如下子樹 2 1 3 在上述示例中,如果要找的值是 5,但因為沒有節點值為 5,我們應該返回 ...

leetcode 樹 二叉搜尋樹中第K小的元素

給定乙個二叉搜尋樹,編寫乙個函式kthsmallest來查詢其中第k個最小的元素。說明 你可以假設 k 總是有效的,1 k 二叉搜尋樹元素個數。示例 1 輸入 root 3,1,4,null,2 k 1 3 1 4 2輸出 1示例 2 輸入 root 5,3,6,2,4,null,null,1 k ...

leetcode 二叉樹 驗證二叉搜尋樹

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