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 binary tree
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/</span>
我额外定义了一个结构体,加了一个高度域:
struct levelNode {
TreeNode* node;
int level;
levelNode(){}
levelNode(TreeNode* n, int l) : node(n), level(l) {}
};
class Solution {
public:
vector<vector<int> > levelOrder(TreeNode *root) {
vector<vector<int> > ans;
queue<levelNode> q;
if (root != NULL)
q.push(levelNode(root, 0)); // 根节点高度是0
while (!q.empty()) {
levelNode frontNode = q.front();
q.pop();
while (frontNode.level >= ans.size())
ans.push_back(vector<int>());
ans[frontNode.level].push_back(frontNode.node->val);
if (frontNode.node->left != NULL)
q.push(levelNode(frontNode.node->left, frontNode.level + 1));
if (frontNode.node->right != NULL)
q.push(levelNode(frontNode.node->right, frontNode.level + 1));
}
return ans;
}
};