题目
二叉树的层次遍历
思路
用一个队列来存储不同level的树节点,遍历每一次的时候取到值就踢出这个节点,同时也要把下一层的节点储存在队列中,直到队列为空。
代码
python实现的:
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
#
# @param root TreeNode类
# @return int整型二维数组
#
class Solution:
def levelOrder(self , root: TreeNode) -> List[List[int]]:
# write code here
if root == None:
return []
storage_list = [root]
result = []
while(len(storage_list)):
count = len(storage_list)
level = []
for i in range(count):
node = storage_list.pop(0)
level.append(node.val)
if node.left != None:
storage_list.append(node.left)
if node.right != None:
storage_list.append(node.right)
result.append(level)
return result
C++实现的:
/**
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
class Solution {
public:
/**
*
* @param root TreeNode类
* @return int整型vector<vector<>>
*/
vector<vector<int> > levelOrder(TreeNode* root) {
// write code here
vector<vector<int>> res;
if(!root){
return res;
}
queue<TreeNode *> qu;
qu.push(root);
while(!qu.empty()){
vector<int> level;
int num_node = qu.size();
while(num_node--){
TreeNode *node = qu.front();
qu.pop();
level.push_back(node->val);
if(node->left){
qu.push(node->left);
}
if(node->right){
qu.push(node->right);
}
}
res.push_back(level);
}
return res;
}
};