感觉这道题很难想,看discuss才做出来
/**
* Runtime: 0 ms, faster than 100.00%
* Memory Usage: 37.8 MB, less than 34.15%
*/
class Solution {
public TreeNode[] splitBST(TreeNode root, int target) {
if (root == null) {
return new TreeNode[2];
}
if (root.val == target) {
TreeNode[] res = new TreeNode[]{root, root.right};
root.right = null;
return res;
} else if (root.val > target) {
TreeNode[] left = splitBST(root.left, target);
root.left = left[1];
left[1] = root;
return left;
} else {
TreeNode[] right = splitBST(root.right, target);
root.right = right[0];
right[0] = root;
return right;
}
}
}
/**
* 小于和等于本质上是一样的,因为本题要求小于等于的划为一棵树,大于的划为另一棵树
* 时间空间跑出来也是一样
*/
class Solution {
public TreeNode[] splitBST(TreeNode root, int target) {
if (root == null) {
return new TreeNode[2];
}
if (root.val > target) {
TreeNode[] left = splitBST(root.left, target);
root.left = left[1];
left[1] = root;
return left;
} else {
TreeNode[] right = splitBST(root.right, target);
root.right = right[0];
right[0] = root;
return right;
}
}
}