对称二叉树:https://leetcode-cn.com/problems/dui-cheng-de-er-cha-shu-lcof/
描述:判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。
举例:
1
/ \
2 2
/ \ / \
3 4 4 3
思路:观察下图可发现,对称树的二叉树满足以下条件:对称节点的左子节点 == 对称节点的右子节点 && 对称节点的右子节点 == 对称节点的左子节点。因此自上而下递归判断即可。
java语言实现:
public boolean isSymmetric(TreeNode root) {
if (root == null) return true;
return recurForSymmetric(root.left,root.right);
}
public boolean recurForSymmetric(TreeNode left,TreeNode right){
if (left == null && right == null) return true;
if (left == null || right == null || left.val != right.val) return false;
return recurForSymmetric(left.left,right.right) && recurForSymmetric(left.right,right.left);
}
go语言实现:
func isSymmetric(root *TreeNode) bool {
if root == nil {
return true
}
return recurForSymmetric(root.Left,root.Right)
}
// 递归判断
func recurForSymmetric(left *TreeNode,right *TreeNode) bool {
if left == nil && right == nil{
return true
}
if left == nil || right == nil || left.Val != right.Val {
return false
}
return recurForSymmetric(left.Left,right.Right) && recurForSymmetric(left.Right,right.Left)
}