判断二叉树对称与否

题目描述请实现一个函数,用来判断一个二叉树是不是对称的。
注意如果一个二叉树通次二叉树的镜像是相同的,则定义其实对称的。

题目:

/* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { } }; */
class Solution { 
public:
    bool isSymmetrical(TreeNode* pRoot)
    { 
    
    }
};

判断一个二叉树是否是对称的,我们可以利用递归的方法来进行判断
我们可以从根部节点来进行判断
1.判断左右两孩子结点均不为空,则判断两值是否相等,相等,继续向下判断。不相等,直接返回 false
2.判断左右俩孩子均为空,返回 true
3.判断左右俩孩子只有一个孩子为空,另一个不为空,返回 false

通过代码:

/* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { } }; */
class Solution { 
public:
    bool decision(TreeNode* left, TreeNode* right)
    { 
        //左右俩孩子结点均不为空
        if(left != NULL && right != NULL)
        { 
            //判断左孩子和右孩子值是否相等
            if(left->val != right->val)
                return false;
            return decision(left->left, right->right) && decision(left->right, right->left);
        }
        //左右孩子结点均为空
        if(left == NULL && right == NULL)
            return true;
        //其中一个为空
        if(left != NULL && right == NULL)
            return false;
        if(left == NULL && right != NULL)
            return false;
    }
    
    bool isSymmetrical(TreeNode* pRoot)
    { 
        //当二叉树为空树的时候
        if(!pRoot)
            return true;
        //当二叉树不为空树的时候
        return decision(pRoot->left, pRoot->right);
    }

};
    原文作者:AZWCL
    原文地址: https://blog.csdn.net/qq_43800455/article/details/103411188
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞