描述
给出一棵二叉树,返回其节点值的层次遍历(逐层从左往右访问)
您在真实的面试中是否遇到过这个题? 是
样例
给一棵二叉树 {3,9,20,#,#,15,7}
:
3
/ \
9 20
/ \
15 7
返回他的分层遍历结果:
[
[3],
[9,20],
[15,7]
]
挑战
挑战1:只使用一个队列去实现它
挑战2:用DFS算法来做
挑战1:要只使用一个队列就需要区分层,可以使用技术的方法来确定:
/**
* Definition of TreeNode:
* class TreeNode {
* public:
* int val;
* TreeNode *left, *right;
* TreeNode(int val) {
* this->val = val;
* this->left = this->right = NULL;
* }
* }
*/
class Solution {
public:
/**
* @param root: A Tree
* @return: Level order a list of lists of integer
*/
vector<vector<int>> levelOrder(TreeNode * root) {
// write your code here
vector<vector<int>> m_vecs;
if(root==NULL) return m_vecs;
vector<int> m_vector;
queue<TreeNode*> m_queue;
TreeNode* m_node=root;
int num=0;
int level=0;
int now=1;
m_queue.push(m_node);
while(!m_queue.empty()){
m_node=m_queue.front();
m_vector.push_back(m_node->val);
num++;
if(m_node->left) {
m_queue.push(m_node->left);
level++;
}
if(m_node->right) {
m_queue.push(m_node->right);
level++;
}
m_queue.pop();
if(num==now){
m_vecs.push_back(m_vector);
m_vector.clear();
now=level;
level=0;
num=0;
}
}
return m_vecs;
}
};
挑战2:使用DFS算法(深度优先搜索):