剑指offer题解(C语言)----JZ32 从上往下打印二叉树

题目

不分行从上往下打印出二叉树的每个节点,同层节点从左至右打印。例如输入{8,6,10,#,#,2,1},如以下图中的示例二叉树,则依次打印8,6,10,2,1(空节点不打印,跳过),请你将打印的结果存放到一个数组里面,返回。

数据范围:

0≤节点总数≤1000

-1000≤节点值≤1000

解析

  1. 初始化:一个队列q, 将root节点入队列q
  2. 如果队列不空,做如下操作:
  3. 弹出队列头,保存为temp,temp的左右非空孩子加入队列
  4. 做2,3步骤,知道队列为空

代码

int* PrintFromTopToBottom(struct TreeNode* root, int* returnSize ) {
    int *num, pos = 0;
    num = (int *)malloc(sizeof(int) * 1001);
    *returnSize = pos;
    if (!root)
        return num; //空树的情形
    struct TreeNode *que[1000], *temp;
    int front = 0, rear = 0; //设置队首队尾指针
    que[++rear] = root;
    while (rear != front) //若队列不为空时
    {
        temp = que[++front];
        num[pos++] = temp->val; //指向本层子树的根节点
        if (temp->left) //左孩子不为空
            que[++rear] = temp->left; //将左孩子入队列
        if (temp->right) //右孩子不为空
            que[++rear] = temp->right; //将右孩子入队列
    }
    
    *returnSize = pos; //返回层数
    return num; //返回队列
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值