【LeetCode & 剑指offer刷题】树题6:28 对称二叉树(101. Symmetric Tree)

【LeetCode & 剑指offer 刷题笔记】目录(持续更新中...)

101. Symmetric Tree

 
 
/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
//问题: 判断某二叉树是否为对称二叉树 ,联系问题: 变换二叉树为原来的镜像
//方法一:递归法
class Solution
{
public :
    bool isSymmetric ( TreeNode * root )
    {
        return isMirror ( root , root ); //从根结点开始     
    }
   
    bool isMirror ( TreeNode * t1 , TreeNode * t2 ) //判断两个树是否为镜像关系
    {
       
        //三个递归出口
        if ( t1 == NULL && t2 == NULL ) return true ;    //两结点同时为空时为true,只有一个为空时为false,均为非空时,比较当前结点值以及左右子树是否为对称的
        else if ( t1 == NULL || t2 == NULL ) return false ;
        //当前结点值相等,且左结点的左子树和右结点的右子树对称,左结点的右子树和右结点的左子树对称
        return (t1->val == t2->val) && isMirror(t1->left,t2->right) && isMirror(t1->right,t2->left);
    }
};
 

猜你喜欢

转载自www.cnblogs.com/wikiwen/p/10225817.html