The Level In Tree(树中按层遍历相关的问题)
题目描述1:
给定一棵树的头结点head,实现按层遍历打印。
解题思路:
按层遍历的思路通常是借助于队列数据结构。我们先将节点入队,出队的时候将该节点的左右节点各自入队,当上一层的节点出队结束后,我们继续将刚刚入队的这一层节点出队,实现了按层遍历。我们可以使用两个队列分别来记录上一层和当前层的节点;也可以只用一个队的方法,每次记录当前入队的最后一个节点,下一层遍历的时候我们就只要出队到该节点即可。
代码如下:
|
|
解法2(只用一个队列的情况)
|
|
题目描述2:
自底向上按层遍历树的每一层节点并返回结果。与上面题目类似,具体的题目描述可以看LeetCode107.
代码如下:
|
|
题目描述3:
定义树中的节点增加一个next节点,要求给定一棵树的头结点,要求每层的树的节点的next指针指向其同层右侧的指针。
例子:
解题思路:
初看题目可能会觉得思路上会有点卡壳,但是如果之前做过树的按层遍历的话,应该不难想到,我们可以一层一层的遍历树的节点,然后将每一层的树的节点连接起来就可以。
代码如下:
|
|
题目描述4
类似用到树的按层遍历的性质的有,给定一棵树的头结点,要求输出从右侧看这棵树,从第一层到最后一层所看见的树的节点。其实这题的主要思路也是类似的,因为我们知道每层的节点后,我们只要将当前层的末尾节点保存到结果中就可以了。所以需要举一反三,利用之前的题目的解法可以很快的解答出。
例子:
这题也是leetcode上的题目,具体的题目描述可以看这边.
代码如下:
|
|
题目描述5
给定一棵树的头结点,要求返回树的最左侧下方的那个节点。具体的描述可以看LeetCode513.解题思路是按层遍历,找到最后一层的最左侧节点返回即可。
|
|
题目描述6
给定一棵树的头结点,要求我们按照Z字型分层打印树的内容。
同样我们可以利用按层遍历树的方式,不同之处是需要加上一个direction标识用于判断当前层是从前往后还是从后往前答应。具体的题目描述可以看LeetCode103。
代码如下:
|
|