1.二叉树的前序遍历
解题思路:
前序遍历的顺序是, 对于树中的某节点,先遍历该节点,然后再遍历其左子树,最后遍历其右子树
.
中序遍历的顺序是, 对于树中的某节点,先遍历
.其左子树
该节点,然后再遍历该节点
,最后遍历其右子树
后序遍历的顺序是, 对于树中的某节点,先遍历
.
,然后再遍历其左子树
该节点其右子树
,最后遍历该节点
所以对于二叉树的前序,中序,后序遍历来说,使用递归是最方便的方法,具体代码如下:
2.二叉树的层次遍历
解题思路如下:
二叉树的层序遍历,顾名思义就是对一棵二叉树一层一层的遍历它的节点,因此可以使用 BFS进行遍历。显然起点是 root 根节点,首先将起点 root 加入队列,在队列 q 不为空的情况下,遍历当前队列中的所有节点(相当于是遍历本层的所有节点,并全部添加到一个vector 集合中),然后将本层的每个节点扩散得到下一层的所有节点,并把扩散得到的所有节点全部添加到队列 q 中,然后不断重复,直到整棵树遍历完成为止。
代码如下:
3.二叉树的深度
解题思路如下:这道题我使用的是层次遍历,即没经过一层,res++(res表示的就是树的深度,初始值为0)
代码如下:
4.二叉树的层平均值
解题思路如下:
这道题本质还是考察二叉树的层次遍历,在对二叉树每一层遍历的时候记录该层的结点val的总和,并且记录该层节点总个数,然后相除放入vector中即可
代码如下:
5.二叉树的右视图
解题思路如下:这道题我还是使用的层次遍历方法,因为层次遍历要对每一层进行遍历,while语句中的for循环作用就是
这个,因此在for循环中只要加一个判断段语句:if(i==该层节点数目-1),就将队列此时的头结点的值插入到结果数组中,
因为此时的头结点就是该层最后一个结点,即最右的结点。
具体代码如下:
6.反转链表
解题思路:这道题可以用递归法和迭代法两种方法,具体解题思路如下
1.递归法:
我们从根节点开始,递归地对树进行遍历,并从叶子节点先开始翻转。如果当前遍历到的节点 root 的左右两棵子树都已经翻转,那么我们只需要交换两棵子树的位置,即可完成以 root 为根节点的整棵子树的翻转
代码如下:
2.迭代法
迭代法理解起来要比递归法容易,即直接对每一层节点的左右孩子在树中进行交换,再将交换后的该层结点的左右孩子结点压入队列中
代码如下
未完待续。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。