Leetcode 951. 翻转等价二叉树

77 阅读1分钟

题目连接

解题思路

本题和剑指Offer 28.对等的二叉树很像,在判断对等的二叉树的时候,我们只需要递归判断tree1tree2对应的左右子树即可。


在本题和对等的二叉树不同的是可能需要翻转左右子树,然后再进行递归判断。

image.png


递归三部曲
1.确定参数与返回值?
参数是需要判断的节点,返回值是bool表示当前的两个节点是否满足条件;
2.递归结束条件?
当两个节点都为空时则递归结束;
3.单层逻辑?
如果两个节点的值不相等,或则两个节点一个为空另一个不为空则返回false;反正左右子树再进行递归

示例代码

func flipEquiv(root1 *TreeNode, root2 *TreeNode) bool {
   if root1 == nil && root2 == nil {
      return true
   }

   if (root1 != nil && root2 == nil) || (root1 == nil && root2 != nil) || (root1.Val != root2.Val) {
      return false
   }

   return (flipEquiv(root1.Left, root2.Left) && flipEquiv(root1.Right, root2.Right)) ||
      (flipEquiv(root1.Left, root2.Right) && flipEquiv(root1.Right, root2.Left))
}