虽然这道题是一道简单的题,但刚开始看到的时候是没有一个好的思路的。只冒出一个最蠢的办法,遍历节点,然后比较节点数组是否一致,我知道大佬们肯定都不会用这种方法的,我去看了相关解析。
上一篇刚做过比较两个树是否相似的问题,两道题的解题思路是一致的,多一个步骤是新增一个函数就是比较左子树和右子树:
1、两个节点为nil,return true
2、任一一个节点为nil或者左右节点的值不为空,return false
3、循环比较,代码如下所示:
/**
* 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 compare(root.Left, root.Right)
}
func compare(left *TreeNode, right *TreeNode)bool{
if left == nil && right == nil{
return true
}
if left == nil || right == nil || left.Val != right.Val{
return false
}
return compare(left.Left, right.Right) && compare(left.Right, right.Left)
}