• Day20——最大二叉树、合并二叉树、二叉搜索树中的搜索、验证二叉搜索树


    加油!

    目录

    前言

    解题思路:

    二、合并二叉树

    三、二叉搜索树中的搜索

    四、验证二叉树搜索

    总结


    前言

    今日文案:

     猫喜欢吃鱼,猫却不能下水,鱼喜欢吃蚯蚓,鱼却不能上岸,人生,就是一边拥有,一边失去,一边选择,一边放弃。


    一、最大二叉树

    力扣

    解题思路:

    主要也是分割数组思想。

    1. class Solution {
    2. public:
    3. TreeNode* constructMaximumBinaryTree(vector<int>& nums) {
    4. TreeNode*root=new TreeNode(0);
    5. if(nums.size()==1)
    6. {
    7. root->val=nums[0]; //数组只有一个数的时候,可以直接返回
    8. return root;
    9. }
    10. int max=-100,maxindex=0;
    11. for(int i=0;isize();i++) //遍历数组
    12. {
    13. if(nums[i]>max) //找出最大值及其下标
    14. {
    15. max=nums[i];
    16. maxindex=i;
    17. }
    18. }
    19. root->val=max; //建好中节点数值
    20. if(maxindex>0) //判断左子树是否有元素
    21. {
    22. vector<int> lefttree(nums.begin(),nums.begin()+maxindex);
    23. root->left=constructMaximumBinaryTree(lefttree);
    24. }
    25. if(maxindexsize()-1) //判断右子树是否有元素
    26. {
    27. vector<int> righttree(nums.begin()+maxindex+1,nums.end());
    28. root->right=constructMaximumBinaryTree(righttree);
    29. }
    30. return root;
    31. }
    32. };

    二、合并二叉树

    力扣

    解题思路:

    同时遍历两棵树,同一位置都有就加起来,有空就用另外一棵树补。构造一般用前序。

    1. class Solution {
    2. public:
    3. TreeNode* mergeTrees(TreeNode* root1, TreeNode* root2) {
    4. if(root1==NULL) //一个有空就返回另外一个
    5. {
    6. return root2;
    7. }
    8. if(root2==NULL)
    9. {
    10. return root1;
    11. }
    12. TreeNode*node=new TreeNode(0); //建立节点
    13. node->val=root1->val+root2->val; //都有就加起来
    14. node->left=mergeTrees(root1->left,root2->left); //遍历
    15. node->right=mergeTrees(root1->right,root2->right);
    16. return node;
    17. }
    18. };


    三、二叉搜索树中的搜索

    力扣

    1. class Solution {
    2. public:
    3. TreeNode* searchBST(TreeNode* root, int val) {
    4. if(root==NULL)
    5. {
    6. return NULL;
    7. }
    8. if(root->val==val) //找到了就返回
    9. {
    10. return root;
    11. }
    12. if(root->left==NULL&&root->right==NULL) //叶子节点也返回
    13. {
    14. return NULL;
    15. }
    16. TreeNode*node=NULL; //创建节点存值
    17. if(val>root->val) //根据搜索树的定义,分两边搜索
    18. {
    19. node=searchBST(root->right,val);
    20. }
    21. if(valval)
    22. {
    23. node=searchBST(root->left,val);
    24. }
    25. return node;
    26. }
    27. };

    四、验证二叉树搜索

    1. class Solution {
    2. public:
    3. long long maxval=LONG_MIN; //设定最小值
    4. bool isValidBST(TreeNode* root) {
    5. if(root==0)
    6. {
    7. return true; //空节点就返回
    8. }
    9. bool left=isValidBST(root->left); //左遍历
    10. if(maxvalval) //一层一层赋值,递增
    11. {
    12. maxval=root->val;
    13. }
    14. else //有违法的直接false,就再也没有机会翻身了。
    15. {
    16. return false;
    17. }
    18. bool right=isValidBST(root->right);
    19. return right&&left;
    20. }
    21. };


    总结

    感觉囫囵吞枣,好烦,感觉还是没有分清楚,前中后序遍历的过程,贪多嚼不烂了。

  • 相关阅读:
    Web服务(12)——Tomcat管理
    一步一步带你深入源码看Spring是如何加载XML配置文件的
    以周一为每周的第一天,计算周数
    易点易动RFID固定资产管理系统助力企业年终固定资产大盘点
    Python基础知识篇(自学必备)
    搜索——flood fill
    2022年Android面试之网络篇
    App安全架构之前端安全防护
    TypeScript学习记录
    git常见命令和操作
  • 原文地址:https://blog.csdn.net/m0_72503424/article/details/127658668