题目(leecode T669):
给你二叉搜索树的根节点 root
,同时给定最小边界low
和最大边界 high
。通过修剪二叉搜索树,使得所有节点的值在[low, high]
中。修剪树 不应该 改变保留在树中的元素的相对结构 (即,如果没有被移除,原有的父代子代关系都应当保留)。 可以证明,存在 唯一的答案 。
所以结果应当返回修剪好的二叉搜索树的新的根节点。注意,根节点可能会根据给定的边界发生改变。
方法:同样使用递归法,分析三要素。
1:传入参数与返回值:传入树的节点指针,还有下限与上限。返回的是树节点指针。
2:终止条件:终止条件是遇到了空节点就直接返回。
3:单层处理逻辑:在每一次递归中,我们都要判断当前节点的值与low与high的关系。如果当前节点值小于low,那么应该往其右孩子递归;如果大于high,应该往其左孩子递归。随后用相应的根节点的左右孩子节点去接住返回的节点。如此重复直到为空即可。
题解:
class Solution {
public:
TreeNode* trimBST(TreeNode* root, int low, int high) {
if (root == nullptr) return nullptr; //为空
if (root->val < low) return trimBST(root->right, low, high); //右递归
if (root->val > high) return trimBST(root->left, low, high); //左递归
root->left = trimBST(root->left, low, high);
root->right = trimBST(root->right, low, high);
return root;
}
};
标签:递归,随想录,high,二叉树,trimBST,打卡,root,节点,low
From: https://blog.csdn.net/m0_48909584/article/details/139867639