概念
刷题
- 翻转二叉树
第一种使用递归法,使用前序遍历的方法,中序遍历不可取,在反转左右子树的时候,左右子树指针调换,需要将right替换成left才可以遍历。
第二种使用迭代法,也是使用前序遍历。
- 对称二叉树
第一种方法使用递归,将root左右子树,作为翻转,对比。
递归三部曲:
- 确定递归的参数和返回条件:参数是左右子树,返回条件是bool,确定左右子树是否翻转后一致
- 确定终止条件:先判断左右子树有nil的情况,当都不为空时,判断左右子树根节点是否相等,不等则返回false
- 确定递归逻辑:当左右子树根节点相等的时候,判断相应的翻转后的子树是否相等
第二种方法使用迭代,利用队列和栈都是一样的,因为每次只遍历两个对称的节点,所以没有顺序问题,
- 二叉树的最大深度
什么是深度?什么是高度? 深度:任意一个节点到根节点的距离 (前序遍历) 高度:任意一个节点到叶子节点的距离 (后序遍历) 最大深度等于最大高度,所以使用后序遍历求最大高度,也是一样的结果
- 二叉树的最小深度
这里的最小深度是根节点到叶子节点的最小距离,需要判断左右孩子节点其中一个是空的情况,保留存在的节点数而不是最小的1
也是使用求高度,后序遍历
递归三部曲:
- 确定递归函数参数和返回条件:参数是node,当前节点,返回值是高度
- 确定结束条件:当node为空时,返回0
- 确定递归逻辑:后序遍历,左右中
- 左:取左节点高度
- 右:取右节点高度
- 中:左为0, 返回右,右为0,返回左,都不为0,返回最小值
总结
Go语言强行规定判断语句在上一个大括号的结尾同一行。
解决方法: