Java教程

力扣刷题笔记11-二叉树系列(1)

本文主要是介绍力扣刷题笔记11-二叉树系列(1),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

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.迭代法

迭代法理解起来要比递归法容易,即直接对每一层节点的左右孩子在树中进行交换,再将交换后的该层结点的左右孩子结点压入队列中

代码如下

 

未完待续。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

 

这篇关于力扣刷题笔记11-二叉树系列(1)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!