层次存储二叉树

来源:互联网 发布:windows ad域控 编辑:程序博客网 时间:2024/06/14 23:11

题目

有一棵二叉树,请设计一个算法,按照层次打印这棵二叉树。给定二叉树的根结点root,请返回打印结果,结果按照每一层一个数组进行储存,所有数组的顺序按照层数从上往下,且每一层的数组内元素按照从左往右排列。保证结点数小于等于500。

分析

利用last当前行最右指针,nlast表示下一行最右指针.

class TreePrinter {public:    vector<  vector<int> > printTree(TreeNode* root) {        queue<TreeNode*> q;            //广度遍历使用的队列        vector<vector<int>> ve;        //存储在二维数组中        vector<int> row;               //存储树的某一层        q.push(root);                  //根节点入队        TreeNode *last = root,*nlast = NULL;        while(!q.empty())        {            TreeNode* top = q.front();            q.pop();            row.push_back(top->val);            if(top->left){                q.push(top->left);                nlast = top->left;            }            if(top->right){                q.push(top->right);                nlast = top->right;            }            if(last->val == top->val)            {                last = nlast;                ve.push_back(row);                row.clear();            }        }    }};
0 0