题解 | #从上往下打印二叉树#

从上往下打印二叉树

https://www.nowcoder.com/practice/7fe2212963db4790b57431d9ed259701

/**
 * struct TreeNode {
 *	int val;
 *	struct TreeNode *left;
 *	struct TreeNode *right;
 * };
 */
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param root TreeNode类 
 * @return int整型一维数组
 * @return int* returnSize 返回数组行数(改为返回值的个数)
 */
 //方法:利用队列(用于树的广度遍历),队列有队头和队尾下标,暂时称为指针
 //新建数组arr和返回值个数n,分配空间,用于存储返回值
 //新建一个指针队列queue,新建队列头尾指针font,rear,从rear入队,从font出队
 //新建临时指针temp,存储出队元素
 //首先判断二叉树是否为空,空则返回NULL.否则进行下一步
 //将root入队,queue[rear] = root,然后rear自增
 //接下来是while循环判断队列是否为空,即font<rear是否成立
            //出队,将队列头指针font指向的值给临时指针temp,font自增
            //判断出队元素的左右子树不为空,则分别入队
            //最后将出队元素的val值存放入数组arr[n],n自增,再次循环判断
 //最后更新返回数组的长度
 //返回存储出队元素的数组
 #define  SIZE 1001
int* PrintFromTopToBottom(struct TreeNode* root, int* returnSize ) 
{
    // write code here

    //新建数组arr和返回值个数n,分配空间,用于存储返回值
    int *arr = (int*)malloc(SIZE*sizeof(int));
    int n = 0;

    //新建一个指针队列queue,新建队列头尾指针font,rear,从rear入队,从font出队
    struct TreeNode *queue[SIZE];
    int font=0, rear=0;

    //新建临时指针temp,存储出队元素
    struct TreeNode* temp;

    //首先判断二叉树是否为空,空则返回NULL.否则进行下一步
    if(!root)
    {
        return NULL;
    }

    //将root入队,queue[rear] = root,然后rear自增
    queue[rear++] = root;

    //接下来是while循环判断队列是否为空,即font<rear是否成立
            //出队,将队列头指针font指向的值给临时指针temp,font自
            //判断出队元素的左右子树不为空,则分别入队
            //最后将出队元素的val值存放入数组arr[n],n自增,再次循环判断
    while(font<rear)
    {
        temp = queue[font++]; //出队

        if(temp->left)
        {
            queue[rear++] = temp->left; //左子树入队
        }

        if(temp->right)
        {
            queue[rear++] = temp->right; //右子树入队
        }
        
        arr[n++]=temp->val; //将出队元素的val值存放入数组arr[n],n自增
    }

    //最后更新返回数组的长度
    *returnSize = n;

    //返回存储出队元素的数组
    return arr;

}

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-02 14:45
bg是二本双一流硕,目标是Java后端开发岗,投暑期实习0大厂面试,只有极少的大厂测开,可能投的晚加上简历太烂加上0实习?求大佬们给个建议
程序员小白条:别去小厂,初创或者外包,尽量去中小,100-499和500-999,专门做互联网产品的,有公司自研的平台和封装的工具等等,去学习一些业务相关的,比如抽奖,积分兑换,SSO认证,风控,零售等等,目标 Java 后端开发吗?你要不考虑直接走大厂测开?如果技术不行的话,有面试你也很难过的
实习,不懂就问
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
昨天 12:10
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务