Try   HackMD

LeetCode 951. Flip Equivalent Binary Trees

https://leetcode.com/problems/flip-equivalent-binary-trees/description/

題目大意

給定兩棵二元樹,如果經過幾次左右翻轉後兩棵樹一模一樣視作 filp equivalent
回傳是否 filp equivalent

思考

下面 code 最後那串 return 大概講解一下

有兩種情況:

  1. 兩樹左子樹 filp equivalent 且兩樹右子樹 filp euivalent
  2. 兩樹之左子樹分別與對方的右子樹 filp equivalent

C++:

class Solution
{
public:
    bool flipEquiv(TreeNode *root1, TreeNode *root2)
    {
        if (!root1 && !root2)
            return true;

        if (!(root1 && root2 && 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);
    }
};

Go:

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

	if 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)
}