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

代码随想录刷题学习日记

时间:2024-10-23 13:22:19浏览次数:10  
标签:遍历 递归 res 随想录 节点 二叉树 root 日记 刷题

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

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

二叉树理论基础学习

二叉树有两种主要的形式:满二叉树和完全二叉树。

满二叉树:只有度为0的结点和度为2的结点,且度为0的结点在同一层的二叉树。深度为k,有2^k-1个节点。

完全二叉树:除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置的二叉树。若最底层为第 h 层(h从1开始),则该层包含 1~ 2^(h-1) 个节点。

二叉搜索树:一个有序树满足以下特点:

若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;

若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;

它的左、右子树也分别为二叉排序树

平衡二叉搜索树:又被称为AVL(Adelson-Velsky and Landis)树,一棵空的或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是平衡二叉树的二叉树。

二叉树可以链式存储,也可以顺序存储。链式存储方式就用指针, 顺序存储的方式就是用数组。

数组来存储二叉树的遍历方式:如果父节点的数组下标是 i,那么它的左孩子就是 i * 2 + 1,右孩子就是 i * 2 + 2。

二叉树的遍历方式:

  • 深度优先遍历
    • 前序遍历(递归法,迭代法)
    • 中序遍历(递归法,迭代法)
    • 后序遍历(递归法,迭代法)
  • 广度优先遍历
    • 层次遍历(迭代法)

深度优先遍历的前中后,其实指的就是中间节点的遍历顺序。

深度优先遍历一般使用栈(递归)实现,广度优先遍历一般使用队列实现。

二叉树的定义 和链表是差不多的,相对于链表 ,二叉树的节点里多了一个指针, 有两个指针,指向左右孩子。

二叉树的递归遍历学习

递归的三要素:

确定递归函数的参数和返回值: 确定哪些参数是递归的过程中需要处理的,那么就在递归函数里加上这个参数, 并且还要明确每次递归的返回值是什么进而确定递归函数的返回类型。

确定终止条件: 写完了递归算法, 运行的时候,经常会遇到栈溢出的错误,就是没写终止条件或者终止条件写的不对,操作系统也是用一个栈的结构来保存每一层递归的信息,如果递归没有终止,操作系统的内存栈必然就会溢出。

确定单层递归的逻辑: 确定每一层递归需要处理的信息。在这里也就会重复调用自己来实现递归的过程。

144.二叉树的前序遍历

给你二叉树的根节点 root ,返回它节点值的前序遍历。

提供参数:TreeNode root

根据递归遍历学习中,确认递归的三要素可以很好的通过递归实现二叉树的前序遍历。

递归的三要素:

1.参数和返回值类型:需要对二叉树进行遍历,参数需要树的根节点,还需要一个整数数组获取遍历的结果。遍历并将结果记录在数组中,返回值类型为void。

2.终止条件:二叉树的搜索中当节点为null时,应当返回。

3.递归逻辑:前序遍历中,先记录root的值,再递归遍历左子树,结束后再递归遍历右子树。

主要操作:

通过递归定义前序遍历函数。

    public void preorder(TreeNode root,List<Integer>res){
        if(root==null) return;
        res.add(root.val);
        preorder(root.left,res);
        preorder(root.right,res);
    }

创建结果数组

调用递归函数

返回结果数组

94.二叉树的中序遍历

给你二叉树的根节点 root ,返回它节点值的中序遍历。

提供参数:TreeNode root

思路和上一题类似,关键的使用递归实现中序遍历函数大致如下:

    //遍历方法
    public void inorder(TreeNode root,List<Integer>res){

        //终止条件
        if(root==null) return;
        //递归逻辑
        inorder(root.left,res);
        res.add(root.val);
        inorder(root.right,res);
    }

145.二叉树的后序遍历

给你二叉树的根节点 root ,返回它节点值的后序遍历。

提供参数:TreeNode root

思路大致与前一题类似,主要的使用递归实现后序遍历函数大致如下:


    public void postorder(TreeNode root,List<Integer>res){

        if(root==null) return ;
        postorder(root.left,res);
        postorder(root.right,res);
        res.add(root.val);

    }

标签:遍历,递归,res,随想录,节点,二叉树,root,日记,刷题
From: https://blog.csdn.net/weixin_73939095/article/details/143181029

相关文章

  • 【日记】不小心把 Bot 搞炸了(586 字)
    正文今天天气好好。下午稍微走出行里,偷了一会儿懒,晒了太阳。可惜下班时天已经黑了。感觉上班之后总是与美好的时光错过。今天没有跳舞,老师专门给我发了消息说不在那边。不跳舞也挺好,好好恢复一下右腿膝盖。关于体检,今天特意选了一下项目。就算把所有有用的项目都......
  • 代码随想录-环形链表II
    题目与解析    题目链接:环形链表II本题两个关键点,1、确定有环2、确定环的入口位置 提供两种解法,第一种是我借助了一个辅助的列表来记录指针,空间复杂度O(n)比较无脑 第二种是Carl哥的双指针法,又是套圈问题,虽然很难想,但还是推荐这种方式,这才是算法解法一:publ......
  • 代码随想录-链表相交
    题解与说明要注意区分链表相交是指针相等,而不是值相等。这里当时没有想清楚,还以为leetcode的样例一给错了,原来人家是想强调这个问题哈哈这里给出三种解法:(leetcode格式)①看了代码随想录的解释后,自己写的代码。②看了代码随想录的代码后,对原有的代码循环进行优化。③......
  • 代码随想录算法训练营第八天|leetcode344.反转字符串、leetcode541. 反转字符串II、卡
    1leetcode344.反转字符串题目链接:344.反转字符串-力扣(LeetCode)文章链接:代码随想录视频链接:字符串基础操作!|LeetCode:344.反转字符串_哔哩哔哩_bilibili自己的思路:直接使用python的内置函数reverse进行一个操作1.1自己的代码1.1.1python的内置函数classSolution:......
  • 软考刷题记录2
    1.选择题1.以下关于总线的叙述中,不正确的是()。A.并行总线适合近距离高速数据传输B.串行总线适合长距离数据传输C.单总线结构在一个总线上适应不同种类的设备,设计简单且性能很高D.专用总线在设计上可以与连接设备实现最佳匹配答案:C解析:单总线结构如上图所示。计算机的各......
  • 考公刷题,如何才能做到有效提高?
    在这个“不拼爹”的时代里,考公务员成了不少小伙伴们的首选。但是,要想在这条路上走得稳当,可不是一件容易的事儿。如何通过刷题来提升自己的竞争力呢?我们就来说说那些能让你刷题效率翻倍的小技巧吧!1.制定合理的学习计划刷题不是漫无目的地做题,而是要有计划地进行。想象一下,如......
  • C++刷题tricks整理
    是自己做题中整理的常用C++操作,此为存档。STL容器容器适配器,STL里面的vector/array/deque/set/map/unordered_set可以直接使用==比较是否相等:vector<int>a;deque<int>a;map<int,string>a;unordered_map<int,string>a;set<int>a;unordered_set<int>a;forward_lis......
  • 代码随想录算法训练营day22和day23 | 77. 组合 216.组合总和III 17.电话号码的字母
    学习资料:https://programmercarl.com/回溯算法理论基础.html回溯法backtracking:for循环控制递归数量,暴力搜索:组合、切割、子集、排列、棋盘今天学了组合和切割可以画个N叉树的图来帮助理解回溯过程组合又包括1.单个数组(要加startIndex参数)或多个数组;2.数组内有无重复元素;3.数......
  • PMP--必刷题–解题–61-70
    文章目录4.整合管理--问题日志--61、[单选]一个软件交付项目开始遇到技术障碍,这个问题可能导致交付物延迟。技术服务团队一直在处理这个问题,但即使经过1周的维护,问题仍未解决。高级项目经理现在应该怎么做?62、[单选]客户要求项目经理提供项目状态报告。项目经理发送......
  • PMP--必刷题–解题–71-80
    文章目录4.整合管理--最终报告--工作绩效报告的示例包括状态报告和进展报告。71、[单选]当一个`项目结束`时,一个业务干系人向项目经理请求有关整体项目绩效的信息,以确定该计划的成功。项目经理应该怎么做,以向干系人提供相关信息?4.整合管理--6.实施整体变更控制--项目......