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;
        }

};
全部评论

相关推荐

逆流河上万仙退:我觉得佬没必要 学历在这里 去了也不会对履历有很大提升 只是有可能让自己更熟练 是我的话会更倾向于找暑期或者中大厂日常
查看13道真题和解析
点赞 评论 收藏
分享
04-25 19:29
已编辑
宁波大学 运营
被普调的六边形战士很高大:你我美牛孩
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务