1. 二叉搜索树算法精解:三道经典题目剖析
二叉搜索树(BST)作为数据结构中的重要成员,在算法面试和实际工程中都有广泛应用。今天我将分享三道LeetCode上经典的二叉搜索树题目解法,结合自己刷题和面试的经验,详细解析每道题的解题思路、代码实现和易错点。
1.1 修剪二叉搜索树(LeetCode 669)
1.1.1 问题理解与递归思路
修剪二叉搜索树的问题要求我们保留节点值在给定范围[low, high]内的节点,移除所有值不在该范围内的节点。关键在于理解BST的性质:对于任意节点,左子树所有节点值都小于它,右子树所有节点值都大于它。
当遇到root->val < low的情况时,根据BST性质,root的左子树所有节点值都会小于low,因此可以直接舍弃整个左子树,只需递归处理右子树。同理,当root->val > high时,只需处理左子树。
cpp复制class Solution {
public:
TreeNode* trimBST(TreeNode* root, int low, int high) {
if(root == nullptr) return nullptr;
if(root->val < low) {
TreeNode* right = trimBST(root->right, low, high);
return right;
}
if(root->val > high) {
TreeNode* left = trimBST(root->left, low, high);
return left;
}
root->left = trimBST(root->left, low, high);
root->right = trimBST(root->right, low, high);
return root;
}
};
1.1.2 时间复杂度与空间复杂度分析
时间复杂度为O(N),其中N是树中节点数量,因为每个节点最多被访问一次。空间复杂度取
