时间复杂度:O(n)
解题思路
还是递归思路,只不过这次同时遍历两个根结点。
根据镜像对称,在遍历左子树的左孩子时就需要同时遍历右子树的右孩子,遍历左子树的右孩子就同时遍历右子树的左孩子,比较两结点值,相同返回true,不相同返回false。
AC代码
/**
* Definition for a binary tree node.
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
func isSymmetric(root *TreeNode) bool {
return check(root.Left,root.Right)
}
func check(node1,node2 *TreeNode)bool{
if node1==nil&&node2==nil{
return true
}
if node1==nil||node2==nil{
return false
}
return node1.Val==node2.Val&&check(node1.Left,node2.Right)&&check(node1.Right,node2.Left)
}
感悟
最开始想的是创建两个函数,一个遍历左子树一个遍历右子树。看了题解发现自己太垃了,一个函数就可以同时遍历两个结点的。