基础
刷题
- 平衡二叉树
后序遍历
- 二叉树的所有路径
前序遍历 + 回溯
使用递归法:
递归法三板斧:
- 确定递归参数和递归返回值
参数:node当前节点,path记录当前遍历的路径(使用指针)
返回值: 无返回值
- 确定递归终止条件
当前节点为叶子节点时,就是左右孩子节点均为空
- 确定递归处理逻辑
前序遍历:
中: path加入当前节点
左:判断左节点不为空,递归左节点,回溯path,将该节点删除(保证在遍历右节点不会出现该节点)
右:和左一右
- 左叶子之和
后序遍历,最后遍历根节点,root的左叶子之和 等于左右孩子的左叶子之和相加。
- 完全二叉树的节点个数
这里有普通二叉树和完全二叉树两种写法:
普通二叉树:使用后序遍历,左右中,计算出每一个节点下的节点数,递归到root就是所有的节点个数了。
完全二叉树:完全二叉树的特性是,除了最后一行,其他都是满二叉树,最后一行的节点都集中在本行最左边。利用这种特性,可以将本题目的完全二叉树分为两种,满二叉树 和 最后一行不满的完全二叉树。
对于情况一,可以直接用 2^树深度 - 1 来计算,注意这里根节点深度为1。
对于情况二,分别递归左孩子,和右孩子,递归到某一深度一定会有左孩子或者右孩子为满二叉树,然后依然可以按照情况1来计算。
如何判断他的左右子树是否为满二叉树?可以递归向左遍历的深度 和 向右遍历的深度 是否相等,如果相等就是满二叉树。
总结
2 << 1 是 2 ^ 2