题解 | #对称的二叉树#

对称的二叉树

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

};

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

全部评论

相关推荐

头像
11-09 17:30
门头沟学院 Java
TYUT太摆金星:我也是,好几个华为的社招找我了
点赞 评论 收藏
分享
评论
2
收藏
分享
牛客网
牛客企业服务