题解 | #对称的二叉树#

对称的二叉树

https://www.nowcoder.com/practice/ff05d44dfdb04e1d83bdbdab320efbcb

/*
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) {
        //实际上是判断左右子树是否可以相互翻转,
        //同时进行遍历左右子树,并判断对应结点是否相等
        if(pRoot==nullptr)
            return true;
        else
            return reversable(pRoot->left,pRoot->right);

            
    
    }
    bool reversable(TreeNode* leftNode,TreeNode* rightNode)
    {
        //递归出口
        if((leftNode==nullptr&&rightNode!=nullptr)||(leftNode!=nullptr&&rightNode==nullptr))//如果发现有这2种情况提前退出递归不用再向下
            return false;
        if(leftNode==nullptr&&rightNode==nullptr)//递归到底,按照定义应该返回true
            return true;
        if(leftNode->val!=rightNode->val)//这个情况也不必向下,写在这里是为了防止取空指针的值
            return false;


    
        //递归判断对称结点是否相等
        bool leftEqulity=reversable(leftNode->right, rightNode->left);
        bool rightEqulity=reversable(leftNode->left,rightNode->right);

        //返回结果
        return leftEqulity==0?leftEqulity:rightEqulity;
        
    }

};

对于根结点的单个子树来说实际上是后序遍历

全部评论

相关推荐

蚂蚁 基架java (n+6)*16 签字费若干
点赞 评论 收藏
分享
object3:开始给部分🌸孝子上人生第一课了
点赞 评论 收藏
分享
10-25 00:32
香梨想要offer:感觉考研以后好好学 后面能乱杀,目前这简历有点难
点赞 评论 收藏
分享
2 收藏 评论
分享
牛客网
牛客企业服务