• 代码随想录二刷 Day 20


     LeetCode:654.最大二叉树

    这个分割左闭右开一开始不理解,没用过vector的构造函数

    1. class Solution {
    2. public:
    3. TreeNode* constructMaximumBinaryTree(vector<int>& nums) {
    4. TreeNode* node = new TreeNode(0);
    5. if (nums.size() == 1) {
    6. node->val = nums[0];
    7. return node; //这句话只会调用一次
    8. }
    9. int max_value = 0;
    10. int max_index = 0;
    11. for(int i = 0; i < nums.size(); i++) {
    12. if (nums[i] > max_value) {
    13. max_value = nums[i];
    14. max_index = i;
    15. }
    16. }
    17. node->val = max_value;
    18. if (max_index > 0) {
    19. vector<int> new_array1(nums.begin(), nums.begin() + max_index); //左闭右开
    20. node->left = constructMaximumBinaryTree(new_array1);
    21. }
    22. if (max_index < nums.size() -1) {
    23. vector<int> new_array2( nums.begin() + max_index +1, nums.end());
    24. node->right = constructMaximumBinaryTree(new_array2);
    25. }
    26. return node; //这句话会调用很多次,最后一次就是返回结果的时候
    27. }
    28. };

    617.合并二叉树 

    如果是下面这种情况的好,那么等一个树遍历到5的时候另一个树就遍历到的null, 这时候return root1 的时候5以下的节点也会跟着一起过去,然后就直接往上一层返回了, 注意这里返回的是TreeNode*.

    1. class Solution {
    2. public:
    3. TreeNode* sum(TreeNode* root1, TreeNode* root2){
    4. //if(root1 == NULL && root2 == NULL)
    5. //return NULL;
    6. if (root1 == NULL) return root2;
    7. if (root2 == NULL) return root1;
    8. TreeNode *root =new TreeNode(root1->val + root2->val);
    9. root->left = sum(root1->left, root2->left);
    10. root->right =sum(root1->right, root2->right);
    11. return root;
    12. }
    13. TreeNode* mergeTrees(TreeNode* root1, TreeNode* root2) {
    14. return sum(root1, root2);
    15. }
    16. };

    700.二叉搜索树中的搜索

    熟悉下搜索树的特性

    递归法: 

    1. class Solution {
    2. public:
    3. TreeNode* searchBST(TreeNode* root, int val) {
    4. if (root == NULL || root->val == val) return root; //root == NULL 如果不写的话会报错,这是当递归到最后一层还没找到匹配的情况
    5. TreeNode* result = new TreeNode(0);
    6. if (root->val > val) result = searchBST(root->left, val);
    7. if (root->val < val) result = searchBST(root->right, val);
    8. return result;
    9. }
    10. };

    迭代法: 

    1. class Solution {
    2. public:
    3. TreeNode* searchBST(TreeNode* root, int val) {
    4. while (root != NULL) {
    5. if (root->val > val) root = root->left;
    6. else if (root->val < val) root = root->right;
    7. else return root;
    8. }
    9. return NULL;
    10. }
    11. };

  • 相关阅读:
    为什么要做高新?高新技术企业和科技型企业的区别?
    【Python简明教程二十四】模块
    MyBatis整合多数据源
    一种朴素的消失点计算方法
    Vue项目上线打包优化
    idea 没加载 provided的包
    pcb - 做钢网时, 最好带上Mark点
    电商平台如何实现分账功能?
    蒲公英路由器如何设置远程打印?
    php服务端 和 python 爬虫 结合 user-agent
  • 原文地址:https://blog.csdn.net/weixin_43908951/article/details/133331810