Leetcode刷题之——剑指 Offer 28. 对称的二叉树

题目:
请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。

例如,二叉树 [1,2,2,3,4,4,3] 是对称的。
Leetcode刷题之——剑指 Offer 28. 对称的二叉树_第1张图片

方法:使用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;
        }
    }
}

你可能感兴趣的:(leetcode题解,leetcode)