@ 代码随想录算法训练营第三周(C语言)|Day15(二叉树)

@ 代码随想录算法训练营第三周(C语言)|Day15(二叉树)

Day15、二叉树(包含题目 层序遍历 226.翻转二叉树 101.对称二叉树 2 )

层序遍历

题目描述

给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。

题目解答

 int** levelOrder(struct TreeNode* root, int* returnSize, int** returnColumnSizes){
    *returnSize = 0;
    if(root == NULL)
        return NULL;
    struct TreeNode *queue[2000];
    int **res = malloc(sizeof(int*)*2000);
    *returnColumnSizes = malloc(sizeof(int*)*2000);
    int rear = 0, front = 0, count = 0;
    queue[rear++] = root;
    while(front != rear){
        int len = rear - front;
        count = 0;
        res[*returnSize] = malloc(sizeof(int)*(len));
        for(int i = 0; i < len; i++){
            struct TreeNode *temp = queue[front++];
            res[*returnSize][count++] = temp->val;
            if(temp->left)
                queue[rear++] = temp->left;
            if(temp->right)
                queue[rear++] = temp->right;
        }
        (*returnColumnSizes)[*returnSize] = count;
        (*returnSize)++;
    }
    return res;
}


题目总结

数组构造队列。

226.翻转二叉树

题目描述

翻转一棵二叉树。

题目解答

//迭代法
struct TreeNode* invertTree(struct TreeNode* root) {
    if(root==NULL){
        return NULL;
    }
    struct TreeNode*temp=root->left;
    root->left=root->right;
    root->right=temp;
    invertTree(root->left);
    invertTree(root->right);


    return root;
}

题目总结

101.对称二叉树 2

题目描述

给定一个二叉树,检查它是否是镜像对称的。

题目解答

 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!=NULL&&right==NULL){
         return false;
     }
     if(left->val!=right->val){
         return false;
     }
    bool outside= compare(left->left,right->right);
    bool inside=compare(left->right,right->left);
    return outside&&inside;

 }
bool isSymmetric(struct TreeNode* root) {
    if(root==NULL){
        return true;
    }
    return compare(root->left,root->right);
}

题目总结

同时对两棵树处理。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值