修剪二叉搜索树
题目描述
- 给你二叉搜索树的根节点 root ,同时给定最小边界low 和最大边界 high。通过修剪二叉搜索树,使得所有节点的值在[low, high]中。修剪树不应该改变保留在树中的元素的相对结构(即,如果没有被移除,原有的父代子代关系都应当保留)。 可以证明,存在唯一的答案。
- 所以结果应当返回修剪好的二叉搜索树的新的根节点。注意,根节点可能会根据给定的边界发生改变。
题解(java)(递归)
class Solution {
public TreeNode trimBST(TreeNode root, int L, int R) {
if (root == null) return root;
if (root.val > R) return trimBST(root.left, L, R);
if (root.val < L) return trimBST(root.right, L, R);
root.left = trimBST(root.left, L, R);
root.right = trimBST(root.right, L, R);
return root;
}
}
图示
详解
- 1>.判断二叉树是否为空,如果为空,直接返回即可;
- 2>.判断节点的值如果小于最小值,则修剪左分支,返回右分支;
- 3>.判断的值如果大于最大值,则修剪右分支,返回左分支;
- 4>.采用深度优先搜索,修剪完毕后,在把修剪后的左右分支重新拼接;
- 4>.最后返回重新拼接好的二叉树;
Tips
1>.当二叉树节点的下一个子节点为null,且该节点不是该分叉的最后一个节点,在最后输出的时候记为null,但图示不会显示出来。
2>.我们这道题默认二叉搜索树不会有值相等的情况。
声明
- 原作者:E.L.E
- <本文章著作权归作者所有,商业转载请获得作者授权,非商业转载请注明出处>
- <欢迎大家评论>