题目:
请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。
例如,二叉树 [1,2,2,3,4,4,3] 是对称的。
方法:使用DFS先序遍历自顶向下
题目要求判断二叉树是否镜像对称,那么我们可以得出一个结论,那就是判断根节点的两个子树是对称的,也即左子树的左子节点值应该等于右子树的右子节点,左子树的右子节点值应该等于右子树的左子节点。自上往下以此遍历,二叉树均满足这个条件则表示该树为对称的!
算法分析:
终止条件:
左子树和右子树均为空,return true
左子树和右子树一个为空一个不为空,显然不对称,return false
左子树和右子树都不为空,则先判断节点值是否相等,若不等则return false,在递归判断左子树和右子树是否对称。
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public boolean isSymmetric(TreeNode root) {
if(root==null){
return true;
}
return sameTree(root.left,root.right);
}
public boolean sameTree(TreeNode left,TreeNode right){
if(left==null && right==null){
//如果left和right同时为空,则return true
return true;
}
else if(left !=null && right !=null){
//left 和right 都不为空
if(left.val!=right.val){
return false;
}
return sameTree(left.left,right.right) && sameTree(left.right,right.left);
}else{
//否则一个为空一个不为空
return false;
}
}
}