【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);
    }
};
 

 

posted @ 2019-01-05 19:42  wikiwen  阅读(162)  评论(0编辑  收藏  举报