代码随想录day23
669. 修剪二叉搜索树
解题步骤:
1、确定函数返回值和参数;
TreeNode* trimBST(TreeNode* root, int low, int high)
2、确定递归函数截止条件;
if (root == nullptr) return nullptr;
3、确定单层递归逻辑;
//3、若结点的值小于low,则遍历该节点的右子树
if (root->val < low) {
TreeNode* right = trimBST(root->right, low, high);
return right;
}
//3、若结点的值大于high,则遍历该节点的左子树
if (root->val > high) {
TreeNode* left = trimBST(root->left, low, high);
return left;
}
root->right = trimBST(root->right, low, high);
root->left = trimBST(root->left, low, high);
return root;
1 class Solution { 2 public: 3 //1、确定递归函数的参数和返回值 4 TreeNode* trimBST(TreeNode* root, int low, int high) { 5 //2、如果结点为空则返回nullptr 6 if (root == nullptr) return nullptr; 7 //3、若结点的值小于low,则遍历该节点的右子树 8 if (root->val < low) { 9 TreeNode* right = trimBST(root->right, low, high); 10 return right; 11 } 12 //3、若结点的值大于high,则遍历该节点的左子树 13 if (root->val > high) { 14 TreeNode* left = trimBST(root->left, low, high); 15 return left; 16 } 17 root->right = trimBST(root->right, low, high); 18 root->left = trimBST(root->left, low, high); 19 return root; 20 } 21 };
108. 将有序数组转换为二叉搜索树
1 class Solution { 2 private: 3 TreeNode* traversal(vector<int>& nums, int left, int right){ 4 if (left > right) return nullptr; 5 int mid = left + ((right - left) / 2); 6 TreeNode* root = new TreeNode(nums[mid]); 7 root->left = traversal(nums, left, mid - 1); 8 root->right = traversal(nums, mid + 1, right); 9 return root; 10 } 11 public: 12 //1、确定递归函数的参数和返回值 13 TreeNode* sortedArrayToBST(vector<int>& nums) { 14 TreeNode* root = traversal(nums, 0 , nums.size() - 1); 15 return root; 16 } 17 };
538. 把二叉搜索树转换为累加树
1 class Solution { 2 private: 3 int pre = 0; 4 void traversal(TreeNode* cur) { 5 if (cur == nullptr) return ; 6 traversal(cur->right); 7 cur->val += pre; 8 pre = cur->val; 9 traversal(cur->left); 10 } 11 public: 12 TreeNode* convertBST(TreeNode* root) { 13 pre = 0; 14 traversal(root); 15 return root; 16 } 17 };
浙公网安备 33010602011771号