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

};
全部评论

相关推荐

努力成为C语言高手:质疑大祥老师,理解大祥老师,成为大祥老师
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务