1、题目描述
2、解题思路
本题采用递归解法。
先比较 root.val 和 V 的大小:
ans[] = splitBST(root, V),其中 ans[0] 表示拆分后的左子树,ans[1] 表示拆分后的右子树;
比较 root.val 和 V 的大小:
1、如果 root.val < V,说明得去拆分右子树,ans = splitBST(root.right, V),我们知道,ans[1] 全部为拆分后的右子树,ans[0] 应该并入到 root 中形成拆分后的左子树。root.right = ans[0]; ans[0] = root;
2、如果 root.val < V,说明得去拆分左子树,ans = splitBST(root.left, V),我们知道,ans[0] 全部为拆分后的左子树,ans[1] 应该并入到 root 中形成拆分后的右子树。root.left = ans[1]; ans[1] = root。
3、解题代码
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public TreeNode[] splitBST(TreeNode root, int V) {
if (root == null)
return new TreeNode[]{null, null};
else if (root.val <= V) {
TreeNode[] bns = splitBST(root.right, V);
root.right = bns[0];
bns[0] = root;
return bns;
} else {
TreeNode[] bns = splitBST(root.left, V);
root.left = bns[1];
bns[1] = root;
return bns;
}
}
}