【60】把二叉树打印成多行

来源:互联网 发布:linux运行级别介绍 编辑:程序博客网 时间:2024/05/17 09:36

【60】把二叉树打印成多行

  • 参与人数:2502
  • 时间限制:1秒
  • 空间限制:32768K

题目描述
从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
牛客网题目链接:点击这里


VS2010代码:

// Source: http://www.nowcoder.com/practice/445c44d982d04483b04a54f298796288?tpId=13&tqId=11213&rp=3&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking// Author: Yang Qiang// Date  : 2016-8-13#include<iostream>#include<vector>#include<queue>using namespace std;struct TreeNode {    int val;    struct TreeNode *left;    struct TreeNode *right;    TreeNode(int x) :            val(x), left(NULL), right(NULL) {    }};class Solution {public:        vector<vector<int> > Print(TreeNode* pRoot) {            vector<vector<int> > result;            if(!pRoot) return result;            queue<TreeNode*> a1;            vector<int> temp;            a1.push(pRoot);            temp.push_back(pRoot->val);            result.push_back(temp);            temp.clear();            int thisLine=1;            int nextLine=0;            while(/*!a1.empty() && */thisLine!=0) //两个条件等价 取一个即可            {                for(int i=0; i!=thisLine; i++)                {                    if(a1.front()->left)                    {                        a1.push(a1.front()->left);                        temp.push_back(a1.front()->left->val);                        nextLine++;                    }                    if(a1.front()->right)                    {                        a1.push(a1.front()->right);                        temp.push_back(a1.front()->right->val); //一开始发生段错误,                        nextLine++;                             //因为把其中一个写成了left                    }                    a1.pop();                }                thisLine=nextLine;                nextLine=0;                if(!temp.empty())                    result.push_back(temp);                temp.clear();            }            return result;        }   };

牛客网通过图片:

这里写图片描述
这里写图片描述

0 0
原创粉丝点击