当前位置: 首页 > news >正文

Day31-代码随想录-最大二叉树654+合并二叉树617+二叉搜索树中的搜索700

最大二叉树题目如下:

 思路:这个跟构造二叉树是差不多的,只不过需要每次递归需要找到数组的最大值,然后根据最大值对数组进行左右分割,遵循左闭右开的准则。

代码如下:

class Solution {
    public TreeNode constructMaximumBinaryTree(int[] nums) {
        return constructMaximumBinaryTree1(nums, 0, nums.length);
    }
    public TreeNode constructMaximumBinaryTree1(int[] nums, int leftIndex, int rightIndex) {
        //1.递归终止条件:
        if((rightIndex - leftIndex) < 1) return null;
        //2.判断特殊情况,若数组只有一个元素
        if((rightIndex - leftIndex) == 1){
            return(new TreeNode(nums[leftIndex]));
        }
        //3.找出数组中的最大值及其下标:不用每次又新建数组,直接用索引来分割
        int maxIndex = leftIndex;
        int maxValue = nums[maxIndex];
        for(int i = leftIndex+1 ; i < rightIndex; i++){
            if(nums[i] > maxValue){
                maxIndex = i;
                maxValue = nums[i];
            }
        }
        //4.递归构造中节点、左子树和右子树
        TreeNode root = new TreeNode(maxValue);
        //将矩阵不断进行分割
        root.left = constructMaximumBinaryTree1(nums, leftIndex, maxIndex);
        root.right = constructMaximumBinaryTree1(nums, maxIndex+1, rightIndex);
        return root;
    }
}

合并二叉树题目如下:

 这道题的思路较为简单,其实跟操作一棵二叉树是差不多的,无论用哪种遍历都可以,但是需要同时操作两棵树的节点,代码如下:

class Solution {
    public TreeNode mergeTrees(TreeNode root1, TreeNode root2) {
        //1.明确终止条件
        if(root1 == null) return root2;
        if(root2 == null) return root1;
        //2.单层递归逻辑
        root1.val += root2.val;
        root1.left = mergeTrees(root1.left, root2.left);
        root1.right = mergeTrees(root1.right, root2.right);
        return root1;
    }
}

二叉搜索树中的搜索题目如下:

 刚开始还在疑惑怎么返回子树,还说确定了节点之后要不要再遍历它的子树,完全没必要,这是自己没掌握好二叉树的结构。只要匹配到与目标值相等的节点,直接返回即可,因为他返回的是TreeNode结构,又不是数值int。这样代码就会很简单:

class Solution {
    public TreeNode searchBST(TreeNode root, int val) {
        if(root == null || root.val == val) return root;
        TreeNode left = searchBST(root.left,val);
        if(left != null) return left; 
        return searchBST(root.right,val);
    }
}

相关文章:

  • C 预处理器:编译前的文本魔法
  • 【安当产品应用案例100集】042-基于安当KADP实现机密文件安全流转
  • 一篇就够!Windows上Docker Desktop安装 + 汉化完整指南(包含解决wsl更新失败方案)
  • 状态码返回
  • 2025 年前端新趋势:拥抱 Web Component 与性能优化
  • 智能家居赋能宠物经济:未来宠物行业的另一片蓝海
  • 优雅处理拼音输入:jQuery实现中文输入法状态检测的最佳实践
  • mysql 索引
  • 蓝桥杯嵌入式第十二届程序设计题
  • 海康gdb流程
  • 【算法题讲解】45. 跳跃游戏 II
  • 如何选择适合你的美颜SDK?人脸美型功能对比与应用场景分析
  • C语言中的位域:节省内存的标志位管理技术
  • CTF类题目复现总结-[MRCTF2020]ezmisc 1
  • 交流电机类型及其控制技术
  • 淘宝商品数据清洗实战:从复杂JSON到结构化数据库(附Python脚本)
  • LeeCode 434. 字符串中的单词数
  • Spring Initializr搭建spring boot项目
  • 软件工程面试题(七)
  • 格雷码和汉明码的详细总结
  • 自己做网站建议/app制作
  • 贵州网站推广电话/最新长尾关键词挖掘
  • 网站建设邀标函/给网站做seo的价格
  • 青岛的网站设计公司/今天重大新闻
  • 徐州在线制作网站/手机优化软件
  • 网站建设的局限性/网站建设网络推广平台