LeetCode 拆分二叉搜尋樹

2022-06-24 08:12:15 字數 1163 閱讀 6443

q:給你一棵二叉搜尋樹(bst)、它的根結點 root 以及目標值 v。

請將該樹按要求拆分為兩個子樹:其中乙個子樹結點的值都必須小於等於給定的目標值 v;另乙個子樹結點的值都必須大於目標值 v;樹中並非一定要存在值為 v 的結點。

除此之外,樹中大部分結構都需要保留,也就是說原始樹中父節點 p 的任意子節點 c,假如拆分後它們仍在同乙個子樹中,那麼結點 p 應仍為 c 的子結點。

你需要返回拆分後兩個子樹的根結點 treenode,順序隨意。

示例:輸入:root = [4,2,6,1,3,5,7], v = 2

輸出:[[2,1],[4,3,6,null,null,5,7]]

解釋:注意根結點 output[0] 和 output[1] 都是 treenode 物件,不是陣列。

給定的樹 [4,2,6,1,3,5,7] 可化為如下示意圖:

4

/ \

2 6

/ \ / \

1 3 5 7

輸出的示意圖如下:

4

/ \

3 6 和 2

/ \ /

5 7 1

a:

根節點要麼在第一棵子樹中,要麼在第二棵子樹中。假設根節點在第一棵子樹中,那麼這棵樹的左子樹一定在第一棵子樹中,右子樹中部分節點在第一棵子樹,部分在第二棵子樹中。

bns = split(root.right) 為分割樹的結果。bns[0] 和 bns[1] 在分割之後依然還是二叉搜尋樹,其中 bns[0] 在第一棵子樹中,bns[1] 為第二棵子樹。

如上圖所示,需要將 split(root.right) 的結果合併到跟節點所在的子樹中。

class solution ;

else if (root.val <= v) else }}

leetcode 二叉樹 驗證二叉搜尋樹

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

二叉搜尋樹 二叉搜尋樹

題目 二叉搜尋樹 time limit 2000 1000 ms j a others memory limit 32768 32768 k j a others total submission s 6945 accepted submission s 3077 problem descripti...

leetcode 樹 驗證二叉搜尋樹

給定乙個二叉樹,判斷其是否是乙個有效的二叉搜尋樹。假設乙個二叉搜尋樹具有如下特徵 示例 1 輸入 2 1 3輸出 true示例 2 輸入 5 1 4 3 6輸出 false解釋 輸入為 5,1,4,null,null,3,6 根節點的值為 5 但是其右子節點值為 4 思路 可以採用中序遍歷,放在陣列...