把二叉树打印成多行

题目描述

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

思路

  1. 按层遍历二叉树,使用队列数据结构,队列初始值为根节点,每次从队头取出一个元素打印,同时把左结点和右结点插入到队尾。当队列为空时,结束。
  2. 按照层打印,需要统计每层的节点数。两个节点数变量,当前层节点数和下一层节点总数。打印一个值,当前层数节点减一,当时减为0时,讲下一层节点总数赋值为当前层数节点。每加入一个左结点或者右结点,下层总结点数加1。
  3. 具体见code

code

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> >prinNode;
            if(pRoot==NULL)
                return prinNode;
            deque<TreeNode*> nodeque;
            if(pRoot)
                nodeque.push_back(pRoot);
            int curentline=1;
            int nextline=0;
            vector<int> tmpNodes;
            while(!nodeque.empty())
            { 
                TreeNode* node=nodeque.front();
                tmpNodes.push_back(node->val);
                nodeque.pop_front();
                curentline--;
                if(node->left)
                {
                    nodeque.push_back(node->left);
                    nextline++;
                }
                if(node->right)
                {
                    nodeque.push_back(node->right);
                    nextline++;
                }
                if(curentline<=0)
                {
                    curentline=nextline;
                    nextline=0;
                    prinNode.push_back(tmpNodes);
                    tmpNodes.clear();
                }
            }
            return prinNode;
        }
};

猜你喜欢

转载自blog.csdn.net/ytang_/article/details/79981041
今日推荐