Day14 二叉树 part02

24 阅读2分钟

概念

刷题

  1. 翻转二叉树

leetcode.cn/problems/in…

image.png

第一种使用递归法,使用前序遍历的方法,中序遍历不可取,在反转左右子树的时候,左右子树指针调换,需要将right替换成left才可以遍历。

第二种使用迭代法,也是使用前序遍历。

image.png

  1. 对称二叉树

leetcode.cn/problems/sy…

第一种方法使用递归,将root左右子树,作为翻转,对比。

递归三部曲:

  • 确定递归的参数和返回条件:参数是左右子树,返回条件是bool,确定左右子树是否翻转后一致
  • 确定终止条件:先判断左右子树有nil的情况,当都不为空时,判断左右子树根节点是否相等,不等则返回false
  • 确定递归逻辑:当左右子树根节点相等的时候,判断相应的翻转后的子树是否相等

image.png

第二种方法使用迭代,利用队列和栈都是一样的,因为每次只遍历两个对称的节点,所以没有顺序问题,

image.png

  1. 二叉树的最大深度

leetcode.cn/problems/ma…

什么是深度?什么是高度? 深度:任意一个节点到根节点的距离 (前序遍历) 高度:任意一个节点到叶子节点的距离 (后序遍历) 最大深度等于最大高度,所以使用后序遍历求最大高度,也是一样的结果

image.png

  1. 二叉树的最小深度

leetcode.cn/problems/mi…

这里的最小深度是根节点到叶子节点的最小距离,需要判断左右孩子节点其中一个是空的情况,保留存在的节点数而不是最小的1

也是使用求高度,后序遍历

递归三部曲:

  • 确定递归函数参数和返回条件:参数是node,当前节点,返回值是高度
  • 确定结束条件:当node为空时,返回0
  • 确定递归逻辑:后序遍历,左右中
    • 左:取左节点高度
    • 右:取右节点高度
    • 中:左为0, 返回右,右为0,返回左,都不为0,返回最小值

image.png

总结

Go语言强行规定判断语句在上一个大括号的结尾同一行。

image.png

解决方法:

image.png