Day15 二叉树 part03

46 阅读2分钟

基础

刷题

  1. 平衡二叉树

leetcode.cn/problems/ba…

后序遍历

image.png

  1. 二叉树的所有路径

前序遍历 + 回溯

image.png

使用递归法:

递归法三板斧:

  • 确定递归参数和递归返回值

参数:node当前节点,path记录当前遍历的路径(使用指针)

返回值: 无返回值

  • 确定递归终止条件

当前节点为叶子节点时,就是左右孩子节点均为空

  • 确定递归处理逻辑

前序遍历:

中: path加入当前节点

左:判断左节点不为空,递归左节点,回溯path,将该节点删除(保证在遍历右节点不会出现该节点)

右:和左一右

  1. 左叶子之和

leetcode.cn/problems/su…

后序遍历,最后遍历根节点,root的左叶子之和 等于左右孩子的左叶子之和相加。

image.png

  1. 完全二叉树的节点个数

leetcode.cn/problems/co…

这里有普通二叉树和完全二叉树两种写法:

普通二叉树:使用后序遍历,左右中,计算出每一个节点下的节点数,递归到root就是所有的节点个数了。

完全二叉树:完全二叉树的特性是,除了最后一行,其他都是满二叉树,最后一行的节点都集中在本行最左边。利用这种特性,可以将本题目的完全二叉树分为两种,满二叉树 和 最后一行不满的完全二叉树。

对于情况一,可以直接用 2^树深度 - 1 来计算,注意这里根节点深度为1。

对于情况二,分别递归左孩子,和右孩子,递归到某一深度一定会有左孩子或者右孩子为满二叉树,然后依然可以按照情况1来计算。

image.png

如何判断他的左右子树是否为满二叉树?可以递归向左遍历的深度 和 向右遍历的深度 是否相等,如果相等就是满二叉树。

image.png

image.png

总结

2 << 1 是 2 ^ 2