前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >二叉树层次遍历

二叉树层次遍历

作者头像
小飞侠xp
发布2018-08-27 17:50:20
2.5K0
发布2018-08-27 17:50:20
举报

二叉树层次遍历,又称为宽度优先搜索,按树的层次依次访问树的结点。层次遍历使用队列对遍历节点进行 存储,先进入队列的结点, 优先遍历拓展其左孩子与 右孩子。

代码语言:javascript
复制
#include<queue>
#include<vector>
#include<stdio.h>
struct TreeNode{
    int val;
    TreeNode *left;
    TreeNode *right;
    TreeNode(int x) : val(x),left(NULL),right(NULL){}
};
void BFS_print(TreeNode *root ){
    //宽度优先搜索二叉树
    std:: queue<TreeNode *> Q;
    Q.push(root);
    while(!Q.empty()){
         TreeNode *node = Q.front();
         Q.pop();
         printf("[%d]\n",node->val);
         if(node->left){
               Q.push(node->left);
          }
         if(node->right){
              Q.push(node->right);
          }
    }
}
侧面观察二叉树

给定一个二叉树,假设从该二叉树的右侧观察它,将观察到的节点按照从上到下的顺序输出。 LeetCode 199. Binary Tree Right Side View

思考与分析

从二叉树的右侧观察它,将观察到的节点按照 从上到下的顺序输出,就是求 层次 遍历二叉树,每个层中的最后一个节点。

image.png

算法设计

使用Q层次遍历二叉树,遍历时,将 节点与层数绑定为pair,压入队列时,将节点 与层数同时压入队列,在 层次遍历中,每一层中的 最后一个节点最后遍历 到,随时更新每层的最后一个节点,存储到view数组中。

代码语言:javascript
复制
class Solution{
    std::vector<int> rightSideView(TreeNode *root){
        std::vector<int> view;//按层次遍历最后一个节点
        std::queue<std::pair<TreeNode *, int>> Q;//<节点,层数>
        if(root){
            Q.push(std::make_pair(root,0));
        }
        while(!Q.empty()){
            TreeNode * node = Q.front().first;//搜索节点
            int depth = Q.front.second;
            Q.pop();
            if(view.size() == depth){
                view.push_back(node->val);
            }
            else{
                view[depth] = node->val; 
            }
            if(node->left){
                Q.push(std::make_pair(node->left,depth+1));
            }
            if(node->right){
                Q.push(std::make_pair(node->right,depth + 1))
            }
        }
    }
};
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.05.06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 侧面观察二叉树
    • 思考与分析
      • 算法设计
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档