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 思路 可以採用中序遍歷,放在陣列...