首页 > 其他分享 >代码随想录刷题学习日记

代码随想录刷题学习日记

时间:2024-11-04 20:17:38浏览次数:5  
标签:结点 随想录 节点 二叉树 root2 left root1 日记 刷题

仅为个人记录复盘学习历程,解题思路来自代码随想录

代码随想录刷题笔记总结网址:
代码随想录

654.最大二叉树

给定一个不含重复元素的整数数组。一个以此数组构建的最大二叉树定义如下:

二叉树的根是数组中的最大元素。

左子树是通过数组中最大值左边部分构造出的最大二叉树。

右子树是通过数组中最大值右边部分构造出的最大二叉树。

通过给定的数组构建最大二叉树,并且输出这个树的根节点。

提供参数:数组nums

主要操作:

递归三要素(使用索引不重复定义数组/列表)

1.返回值类型和参数:

返回构造出的树的根结点root,输入参数数组nums。

2.终止条件:

左指针left>=右指针时,返回空指针null。

3.单层递归逻辑:

3.1获取数组中的最大值及其索引。

3.2使用最大值构造节点。

3.3使用索引递归设置node的左右子结点。

代码大致如下:

 public TreeNode constructMaximumBinaryTree(int[] nums) {
        List<Integer>numsList=new ArrayList<>();
        for(int i=0;i<nums.length;i++){
            numsList.add(nums[i]);
        }
        return traversal(numsList,0,numsList.size());
        
    }
    public TreeNode traversal(List<Integer>nums,int left,int right){
        //1.终止条件
        if(left>=right)return null;
        //2.单层递归逻辑
        //2.1寻找最大值分界点
        int deleteNum=nums.get(left);
        int deleteIndex=left;
        for(int i=left;i<right;i++){
            if(deleteNum<nums.get(i)){
                deleteNum=nums.get(i);
                deleteIndex=i;
            }
        }
    //构造节点
    TreeNode node=new TreeNode(deleteNum);
    node.left=traversal(nums,left,deleteIndex);
    node.right=traversal(nums,deleteIndex+1,right);

    return node;
        

    }

617.合并二叉树

给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。

你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点。

提供参数:根结点root1,根结点root2。

主要操作:

递归三要素

1.返回值类型和输入参数:

需要返回一个合并后的树的根结点,返回值类型为TreeNode,需要输入两个树来进行合并,输入参数为:TreeNode root1, TreeNode root2。

2.终止条件:

当1树的节点为空时返回2树的节点;

当2树的节点为空时返回1树的节点。

3.单层递归逻辑:

计算中间节点的值为1树在该结点的值+2树在该结点的值。

递归设置新树的左右子结点。

在本题中使用1树来作为新的树(在1树上做修改作为结果返回)。

代码大致如下:

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

标签:结点,随想录,节点,二叉树,root2,left,root1,日记,刷题
From: https://blog.csdn.net/weixin_73939095/article/details/143478519

相关文章

  • 代码随想录第四天|链表part02--24. 两两交换链表中的节点、19.删除链表的倒数第N个节
    资源引用:leetcode题目:24.两两交换链表中的节点(24.两两交换链表中的节点-力扣(LeetCode))19.删除链表的倒数第N个结点(19.删除链表的倒数第N个结点-力扣(LeetCode))面试题02.07.链表相交(面试题02.07.链表相交-力扣(LeetCode))142.环形链表Ⅱ(142.环形链表II-力扣(Leet......
  • 代码随想录第十八天
    530.二叉搜索树的最小绝对差给你一个二叉搜索树的根节点root,返回树中任意两不同节点值之间的最小差值。差值是一个正数,其数值等于两值之差的绝对值。示例1:输入:root=[4,2,6,1,3]输出:1示例2:输入:root=[1,0,48,null,null,12,49]输出:1提示:树中节点的数目范......
  • 代码随想录第十七天
    654.最大二叉树给定一个不重复的整数数组nums。最大二叉树可以用下面的算法从nums递归地构建:创建一个根节点,其值为nums中的最大值。递归地在最大值左边的子数组前缀上构建左子树。递归地在最大值右边的子数组后缀上构建右子树。返回nums构建的*最大......
  • 代码随想录算法训练营第十一天|leetcode150. 逆波兰表达式求值、leetcode239. 滑动窗
    1leetcode150.逆波兰表达式求值题目链接:150.逆波兰表达式求值-力扣(LeetCode)文章链接:代码随想录视频链接:栈的最后表演!|LeetCode:150.逆波兰表达式求值哔哩哔哩bilibili自己的思路:这是一道有思路,但是思路并不多的题目,就是我会觉得是先将数据进行添加,然后对于符号通过......
  • 代码随想录算法训练营第十五天|leetcode110. 平衡二叉树、leetcode257.二叉树的所有路
    1leetcode110.平衡二叉树题目链接:110.平衡二叉树-力扣(LeetCode)文章链接:代码随想录视频链接:后序遍历求高度,高度判断是否平衡|LeetCode:110.平衡二叉树_哔哩哔哩_bilibili1.1视频看后的思路1.1.1完整的代码就是不断判断,对其数据存储,其实突然发现每道题思路真的都很像,就......
  • [Python学习日记-60] 什么是面向对象的程序设计
    [Python学习日记-60]什么是面向对象的程序设计简介编程范式面向过程编程面向对象编程简介    前面我们学习了Python中的语法、数据类型、函数之类的一系列相关知识,我们对Python的编程也比较了解了,甚至可以写一些脚本出来进行一些文件的过滤或者日志的生成......
  • 代码随想录刷题学习日记
    仅为个人记录复盘学习历程,解题思路来自代码随想录代码随想录刷题笔记总结网址:代码随想录106.从中序与后序遍历序列构造二叉树根据一棵树的中序遍历与后序遍历构造二叉树,假设树中没有重复的元素。提供参数:中序遍历数组inorder,后序遍历数组postorder主要操作:递归三要素1......
  • 代码随想录一刷——49.字母异位词分组
    在C语言中确实是有哈希表这个结构体的,因而利用哈希表来解决这个问题C:/** *Returnanarrayofarraysofsize*returnSize. *Thesizesofthearraysarereturnedas*returnColumnSizesarray. *Note:Bothreturnedarrayand*columnSizesarraymustbemal......
  • 代码随想录一刷——242.有效的字母异位词
    在考虑哈希表选择哪种结构的时候(数组,set,map),在大小和范围都比较小的情况下我们优先考虑数组。在本题中,我们构建一个哈希表,来统计在s中各个字母出现的频次,而后在t中对已统计好频次的哈希表进行自减操作,最后判断哈希表中每个索引是否是0,若不是则s和t不是有效地字母异位词,反之,则......