代码随想录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 };
posted @ 2022-10-24 16:23  aijiajia0509  阅读(22)  评论(0)    收藏  举报