![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
力扣——树
文章平均质量分 69
晨星shine
路要一步步走踏实
展开
-
【105】从前序与中序遍历序列构造二叉树
目录标题一、题目二、思路代码123一、题目二、思路前序遍历:根左右 中序遍历:左根右就不太明白从数组到树的递归怎么写,递归参数是什么,于是看了下评论的解答,自己理解了下然后具体的范围确定,这里细节有两个点纠结了很久:(1)先序遍历的左右子树范围切片点(2)中序遍历的左子树起点为什么不能一直是0这两个点待会会在bug调试里提到。先讲一下正确的思路:接下来就是具体的范围确定。(1)先序第一个值为根值(2)在中序中找到a[i]=num,则[l2,i-1]为左树,[i+1,r2]为右树原创 2021-06-25 22:37:08 · 231 阅读 · 0 评论 -
【详细整理】102 二叉树的层序遍历
目录标题一、题目二、广度优先BFS几个bug点分析三、递归思路代码遇到的bug分析一、题目二、广度优先BFS照着之前整理的BFS模板一下就写出来了。模板详细的分析整理见之前博客。唯一的一个点是一边刷题一边学基础语法和数据结构。一开始有点懵怎么向二位的list里加元素。原来只有先新建一个list ,再向list里add就可以。class Solution { public List<List<Integer>> levelOrder(TreeNode root) {原创 2021-06-25 22:17:25 · 151 阅读 · 0 评论 -
【详细整理】广度优先算法
目录标题一、模板一、 理论1、解决的问题2、实现方法3、补充:队列的理论知识一、模板 // bfs,最常用于最小路径问题 Queue<> queue = new LinkedList<>(); // 这里是假设元素不会重复,所以用Set来判断一个元素是否已经读取过 Set<> visited = new Set<>(); queue.offer(起点); visited.add原创 2021-06-24 21:10:35 · 1827 阅读 · 0 评论 -
【小白必看】如何写递归
思想来自力扣101题中大佬的热评,链接在文末附上。为什么写不出来是因为找不到递归的点,怎么找递归的点:举例1判读一棵树是否对称思路:(1)首先如果是空树,肯定对称。不是的话对称需要比较左树和右树(2)左树的左孩子与右树的右孩子相等,左树的右孩子与右树的左孩子相等则对称。如何比较左孩子和右孩子是否相等…这里,递归的点就出来了,就是实现一个函数A需要用到A实现之后的功能。要判断两树是否相同,要通过他们的孩子是否相同来判断。递归点出现之后,立马动手按照递归思路写代码:树为空,对称不为空,通过原创 2021-06-24 20:40:07 · 323 阅读 · 0 评论 -
【非递归】二叉树迭代遍历
文章目录模板前序遍历中序遍历后序遍历模板二叉树的遍历顺序还是如图,使用迭代就是增加一个栈,来储存父节点。利用读取的顺序来实现遍历顺序。万能模板: while (root!=null||!stack.isEmpty()){ while(root!=null){ } if(!stack.isEmpty()){ } }原创 2021-06-23 17:07:56 · 124 阅读 · 0 评论 -
【详细整理】二叉树的遍历+力扣617合并二叉树 226翻转二叉树
文章目录一、二叉树遍历构架二、遍历举例三、遍历架构实操——力扣题1、617 合并二叉树(1)题目:(2)分析解答2、226翻转二叉树(1)题目(2)分析解答一、二叉树遍历构架刚开始刷二叉树的题,边刷边学,第一次接触二叉树,递归真是看得人:我是谁 我在哪,整理一下今天学的内容,复习同时以便以后自己查阅。如果有错误或者疏漏,欢迎大家补充交流。二叉树遍历构架: void traverse(TreeNode root){ if(root == null){ retur原创 2021-06-22 22:02:22 · 189 阅读 · 0 评论