代码随想录算法训练营第十四天|226 翻转二叉树、101 对称二叉树、104 二叉树的最大深度

一、226 翻转二叉树

struct TreeNode* invertTree(struct TreeNode* root) {
    if(root == NULL)
        return root;
    //前序
    //交换(中)
    struct TreeNode*tmp = root ->left;
    root->left = root->right;
    root->right = tmp;
    //左
    invertTree(root->left);
    //右
    invertTree(root->right);
    
    //后序
    //左
    invertTree(root->left);
    //右
    invertTree(root->right);
    //交换(中)
    struct TreeNode*tmp = root ->left;
    root->left = root->right;
    root->right = tmp; 
   
    //中序
    //左
    invertTree(root->left);
    //交换(中)
    struct TreeNode*tmp = root ->left;
    root->left = root->right;
    root->right = tmp;
    //右(现左原右)
    invertTree(root->left);

    return root;
}

二、101 对称二叉树

bool Compare(struct TreeNode*left,struct TreeNode*right)
{
    if(left==NULL&&right==NULL)//都为空
        return true;
    else if(left==NULL||right==NULL)//其中一个为空,另一个不为空
        return false;
    else if(left->val!=right->val)//两个都不为空但值不相等
        return false;
    return (Compare(left->left,right->right)&&Compare(left->right,right->left));
}
bool isSymmetric(struct TreeNode* root) {
    if(root==NULL){
        return true;
    }  
    return Compare(root->left,root->right);
}

三、104 二叉树的最大深度

int maxDepth(struct TreeNode* root) {
    //若传入结点为NULL,返回0
    if(!root)
        return 0;
    
    //求出左子树深度
    int left = maxDepth(root->left);
    //求出右子树深度
    int right = maxDepth(root->right);
    //求出左子树深度和右子树深度的较大值
    int max = left > right ? left : right;
    //返回较大值+1(1为当前层数)
    return max + 1;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值