解题思路
本题和剑指Offer 28.对等的二叉树很像,在判断对等的二叉树的时候,我们只需要递归判断tree1和tree2对应的左右子树即可。
在本题和对等的二叉树不同的是可能需要翻转左右子树,然后再进行递归判断。
递归三部曲
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))
}