package main import ( "fmt" ) // TreeNode ... type TreeNode struct { Val int Left *TreeNode Right *TreeNode } func isSymmetricIter(lNode *TreeNode, rNode *TreeNode) bool { if lNode == nil || rNode == nil { return lNode == rNode } if lNode.Val != rNode.Val { return false } return isSymmetricIter(lNode.Left, rNode.Right) && isSymmetricIter(lNode.Right, rNode.Left) } /** * Definition for a binary tree node. * type TreeNode struct { * Val int * Left *TreeNode * Right *TreeNode * } */ func isSymmetric(root *TreeNode) bool { if root == nil { return true } return isSymmetricIter(root.Left, root.Right) } func main() { /** * t1: 5 * / \ * 1 4 * / \ * 2 3 */ t1l := TreeNode{1, nil, nil} t1rl := TreeNode{2, nil, nil} t1rr := TreeNode{3, nil, nil} t1r := TreeNode{4, &t1rl, &t1rr} t1 := &TreeNode{5, &t1l, &t1r} /** * t2: 1 * / \ * 2 2 * / \ / \ * 4 3 3 4 */ t2ll := TreeNode{4, nil, nil} t2lr := TreeNode{3, nil, nil} t2l := TreeNode{2, &t2ll, &t2lr} t2rl := TreeNode{3, nil, nil} t2rr := TreeNode{4, nil, nil} t2r := TreeNode{2, &t2rl, &t2rr} t2 := &TreeNode{1, &t2l, &t2r} fmt.Println(isSymmetric(t1)) fmt.Println(isSymmetric(t2)) }