「算法与数据结构」学会这个套路,一口气能刷5道二叉树!

325 阅读3分钟

转眼间已经刷算法题一个月了,曾经我以为算法是一座无法逾越的高山,现在我居然也能做出来题了(热泪盈眶.jpg)。学会了二叉树的套路,回溯和动态规划都是触类旁通。好了,废话不多说,我们开始今天的表演吧!

前菜二叉树的层序遍历

给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。 示例:
二叉树:[3,9,20,null,null,15,7]

image.png

解题思路:

首先上代码,我们可以采用队列或者是栈遍历节点,这里的区别就是队列是先进先出,也就是深度优先搜索;栈是先进后出,实现了广度优先搜索。好巧不巧,二者的代码差别就只在这个数组shift和pop方法上。

这里说一下队列的过程,3入队,3出队,9和20入队,9出队,因为9无子节点,20出队,15和7入队,15和7依次出队,队列为空end。最后输出的结果是[3,9,20,15,7],也就是我们想要的层次遍历了。

但题目要求输出的有些许差别,没关系我们这里改一小小下。

carbon (2).png 遍历的过程中加上一个for循环,将每一层的节点依次出队列,修改之后的结果就变成了[[3],[9,20],[15,7]]。完美符合,撒花结束。 carbon (1).png 学会了这个套路,刷起题来如有神助。接着我们来看

主菜一103. 二叉树的锯齿形层序遍历

image.png

解题思路:

拿出我们的套路,这有啥难度。不就比刚才多了一个步骤吗,根据第几层的奇偶性判断是否reverse。代码我就不贴了,兄弟们动起你们的小脑瓜。打铁趁热。

主菜二116.二叉树的锯齿形层序遍历

image.png

解题思路:

这一看我们主要在队列将最后一个节点的next指向null,其余的几点的next只想队列的下一个元素。套路里的for循环里判断一个是否是最后一个元素即可。so easy嗷嗷。这些都千篇一律,我们来个有新意der。

主菜三112.路径总和

给你二叉树的根节点 root 和一个表示目标和的整数 targetSum ,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和 targetSum 。

叶子节点 是指没有子节点的节点。

image.png

解题思路:

这一题我们可以采用两个队列,一个队列是套路里用来遍历节点,另一个用来记录叶子节点到根节点的路径之和,最后判断是否等于targetSum。完成。

carbon (3).png

饭后甜点113. 路径总和

啊这,这和上一题就是一样一样滴,不就是改了个输出吗。说起来容易,这个题我卡了好几个小时,都是泪啊。

image.png

解题思路:

我们基于上题的代码,增加一个map,key当前节点,value是他的父节点,找到和等于targetSum的节点,再倒着找回根节点就是我们需要的路径啦!~~

carbon (4).png

今日份的分享结束了,有缘再会叭~~