JZ60 把二叉树打印成多行

题目描述

从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。

思路

这题本质上是树的广度优先遍历,用一个队列就可以实现:
(1) 先把头结点放入队列;
(2) 取一个数就把它的左右节点放进队列
(3) 直到队列为空

但是这里我遇到了一个问题,需要分行输出怎么办?
我一开始是想着,队列中途会为空,为空了就代表一行结束了,这个时候就把临时数组放进res中并清空,但是这个只是对于第一行来说;从第二行开始,取一个数就把它的左右孩子放进队列,这个时候已经到下一行了,队列也不为空。

然后看到讨论区中的一种方法:用队列里的当前个数来控制每一行的结束,每次放完后就先把size保存起来,取一个数就减一,直到减为0了就换行

代码

class Solution {
public:
        vector<vector<int> > Print(TreeNode* pRoot) {
            vector<vector<int>> res;
            if(pRoot==NULL)
                return res;
            vector<int> res_temp;
            queue<TreeNode*> help;
            TreeNode* pNode;
            help.push(pRoot);
            int numInEachFloor;
            while(!help.empty())
            {
                numInEachFloor=help.size();
                while(numInEachFloor--)
                {
                    pNode=help.front();
                    help.pop();
                    res_temp.push_back(pNode->val);
                    if(pNode->left!=NULL)
                        help.push(pNode->left);
                    if(pNode->right!=NULL)
                        help.push(pNode->right);
                }
                res.push_back(res_temp);
                res_temp.clear();
            }
            return res;
        }

};
全部评论

相关推荐

不愿透露姓名的神秘牛友
06-26 15:18
点赞 评论 收藏
分享
我:“加班需要有加班工资。”&nbsp;hr:“为什么?”&nbsp;哈哈哈哈哈哈哈离大谱
juntenor:你确实太理想化了,对社会不了解呀。这个和HR没有关系,这是国内特色,不然怎么还会有外包就这种逆天的存在呢。
点赞 评论 收藏
分享
06-17 00:26
门头沟学院 Java
程序员小白条:建议换下项目,智能 AI 旅游推荐平台:https://github.com/luoye6/vue3_tourism_frontend 智能 AI 校园二手交易平台:https://github.com/luoye6/vue3_trade_frontend GPT 智能图书馆:https://github.com/luoye6/Vue_BookManageSystem 选项目要选自己能掌握的,然后最好能自己拓展的,分布式这种尽量别去写,不然你只能背八股文了,另外实习的话要多投,尤其是学历不利的情况下,多找几段实习,最好公司title大一点的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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