LeetCode/go/flip-equivalent-binary-trees.go

27 lines
516 B
Go
Raw Permalink Normal View History

package main
func flipEquiv(left, right *TreeNode) bool {
// reached leaves
if left == nil && right == nil {
return true
}
// reached only one leaf
if left == nil || right == nil {
return false
}
// can't build equivalent subtrees
if left.Val != right.Val {
return false
}
// no swap
isEquiv := flipEquiv(left.Left, right.Left) && flipEquiv(left.Right, right.Right)
// with swap
isEquiv = isEquiv || (flipEquiv(left.Left, right.Right) && flipEquiv(left.Right, right.Left))
return isEquiv
}