
二叉树
Andy_Xie007
这个作者很懒,什么都没留下…
展开
-
【二叉树】Leetcode 266.翻转二叉树
如果从整棵树的角度来看,用层序遍历翻转一棵二叉树需要遍历同一层节点后再反向遍历该层节点并且改变指针,但是这样做不仅低效率还会访问到野指针。因此必须换一个角度考虑问题:如果将每一个父节点的左右孩子交换,同样能达到翻转二叉树的效果。如果使用前序遍历,参考之前“前序遍历输出节点值”的代码和递归三要素:确定递归函数的参数和返回值,确定终止条件,确定单层递归的逻辑。同样也可以使用层序遍历,增加一句交换左右节点即可。原创 2023-11-30 14:00:59 · 1222 阅读 · 0 评论 -
【二叉树】Leetcode 429. N 叉树的层序遍历
同样是根据二叉树模板做出一些改变,在二叉树的层序遍历中,每一个节点的子节点数上限是2,因此无需通过循环检查子节点合法性。由于本题的节点为N叉树,需要遍历储存节点的children数组来检查子节点合法性。原创 2023-11-28 12:30:00 · 566 阅读 · 0 评论 -
【二叉树】Leetcode 637. 二叉树的层平均值
根据层序遍历的模板进行修改;主要的不同是,不需要输出每一层所有节点值,只需要输出平均值,只需要定义一个double双精度浮点数储存每一层数的总和,输出时将总和除以层节点总数即为层平均数,改动如下原创 2023-11-26 11:53:27 · 656 阅读 · 0 评论 -
【二叉树】Leetcode 199. 二叉树的右视图
注意到只需要对输入输出稍加改动即可,也就是将每一层的数组的末项输出(因为层序遍历先从左边开始)即可。注意不要输出ans.end(),这个指向无效地址,应当输出ans.back();原创 2023-11-22 23:49:12 · 916 阅读 · 0 评论 -
【二叉树/动态规划】Leetcode 543.二叉树的直径
由于题目特意说明了最浅节点并不一定是根节点,所以理论上二叉树中所有节点都可以作为这个最浅节点。(即便是叶节点也可以认为它有2个地址为nullptr的子节点)假如给定一个确定的最浅节点,那么存在唯一“直径”,即存在唯一“一个叶节点经过该最浅节点再到另一个叶节点的路径和的最大值”。也就是说,只要计算出二叉树中所有的节点作为“最浅节点”的“直径”,求该集合中的最大值即可。首先,容易得出,所求直径两端的节点一定为叶子节点。这一点用反证法即可证明,假设直径端点为一个非叶子节点,那么他的子节点一定是一个更优端点。原创 2023-11-18 21:47:39 · 222 阅读 · 0 评论 -
【二叉树】Leetcode 102.二叉树的层序遍历
获取当前队列的大小 n,表示当前层的节点数目。1.创建一个答案数组 ans,用来存储层序遍历的结果;创建了一个队列 q,用来辅助进行层序遍历。2.处理特殊情况:如果根节点为空,直接返回空的层序遍历结果。如果不为空,将根节点放入队列中。运用C++ queue容器按层优先级储存节点并进行操作。当队列不为空时,创建一个空数组 vec,用来存储当前层的节点值。原创 2023-11-19 15:51:15 · 281 阅读 · 0 评论