Fork me on GitHub

二叉树-层序遍历

二叉树-层序遍历

之前所述二叉树的递归遍历或者迭代遍历都属于深度优先搜索,即先迭代或者递归到树的某一枝最深处再逐渐回退,再到另一支的最深处再逐渐回退,从而完成遍历。而层序遍历属于广度优先遍历,即一层一层去遍历。

需要借助队列辅助实现一层一层遍历的逻辑,因为其先进先出的逻辑。而栈先进后出的逻辑适合模拟深度优先遍历即递归的逻辑。

层序遍历结果为:[[6] ,[4 7], [1 3 5 8]]

//队列辅助实现二叉树的层序遍历
class Solution{
public:
vector<vector<int>> levelOrder(TreeNode* root){
queue<TreeNode*> que;//生成一个队列,队列里的元素是树的节点指针
if(root!=NULL) que.push(root);
vector<vector<int>> result;//存放遍历结果
while(!que.empty()){
int size = que.size();//que.size()在后续不断变化
vector<int> vec;//存放当前层的遍历结果
for(int i = 0;i<size;i++){
TreeNode* node = que.front();
que.pop();
vec.push_back(node->val);
if(node->left) que.push(node->left);
if(node->right) que.psuh(node->right);
}
result.push_back(vec);
}
return result;
}
};
//递归实现
//实现流程还是按照深度优先遍历的思维,随着递归进入左边的最深处,相应的建立对应的vector<int>,然后回退并不断将相应层的节点元素填入至对应的vector<int>中,与上述队列的广度优先搜索即从根节点开始一层一层遍历不同
class Solution{
public:
void order(TreeNode* cur,vector<vector<int>>& result,int depth){
if(cur==nullptr) return;
if(result.size()==depth) result.push_back(vector<int>());
result[depth].push_back(cur->val);
order(cur->left,result,depth+1);
order(cur->right,result,depth+1);
}
vector<vector<int>> levelorder(TreeNode* root){
vector<vector<int>> result;
int depth = 0;
order(root,result,depth);
return result;
}
}
posted @   bupaanything  阅读(24)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
1
点击右上角即可分享
微信分享提示