按层次方式打印二叉树

来源:互联网 发布:购买域名和空间 编辑:程序博客网 时间:2024/05/19 08:06

给定一个二叉树,以层次方式打印各层元素,如下。用到广度优先遍历。以广度优先,就是说一层层地打印,这样,先入的就先打印,所以用到的数据据结构是队列。而深度优先,则是先遍历完一个分支才进行第二个分支,用的是栈结构。

Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, level by level).

For example:
Given binary tree {3,9,20,#,#,15,7},

    3   / \  9  20    /  \   15   7

return its level order traversal as:

[  [3],  [9,20],  [15,7]]
/** * Definition for a binary tree node. * struct TreeNode { *     int val; *     TreeNode *left; *     TreeNode *right; *     TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public:    vector<vector<int>> levelOrder(TreeNode* root) {                vector<vector<int>> ret;        vector<int> v;        if (!root) return ret;                int cur_level = 1;//当前所在层次        int cur_level_num = 1;//当前层次还有多少个元素要打印        int next_level_num = 0;//下一个层次有多少个元素要打印        queue<TreeNode*> q;//广度优先必用数据结构                q.push(root);        while (!(q.empty()))        {            root = q.front();            q.pop();            v.push_back(root->val);//要打印的元素保存            --cur_level_num;//要打印的元素减一            if (root->left)//这说明是下一层的元素            {                q.push(root->left);                ++next_level_num;            }            if (root->right)            {                q.push(root->right);                ++next_level_num;            }            if (0 == cur_level_num)//换层标志,各种初始化            {                cur_level_num = next_level_num;                next_level_num = 0;                ++cur_level;                ret.push_back(v);                v.clear();            }        }                return ret;    }};


0 0
原创粉丝点击