花样变形1::二叉树层次遍历但是分层打印

分析:与普通打印多了一个分层打印,其实只要在在层次遍历中多设置一个标记变量即可
代码如下:

//二叉树的层次遍历
void levelTravel(BTNode *bt)
{if (bt == NULL){return;}queue<BTNode *> nodeQueue;nodeQueue.push(bt);nodeQueue.push(NULL); //放入空节点,作为层的结束符while (nodeQueue.size()){BTNode *pNode = nodeQueue.front(); //取队首元素nodeQueue.pop();  //必须出队列if (pNode)  //该节点非空{cout << pNode->data << ' ';if (pNode->lchild)  //左孩子{nodeQueue.push(pNode->lchild);}if (pNode->rchild)   //右孩子{nodeQueue.push(pNode->rchild);}}//如果结点为空并且队列非空,则是一行访问结束,下一行的入队列结束,因此压入一个空指针  //若队列也是空,则说明已访问完毕else if (nodeQueue.size()){nodeQueue.push(NULL);cout << endl;}}
}

可以看出我们通过设置了空节点来表示一层的结束,这样就可以很好的实现分层打印。

花样变形2:将二叉树分层打印的同时,将每层的数据保存下来

void levelTravel2(BTNode *bt)
{vector<vector<int>> result; //存放所有层的节点vector<int> cur; //存放每一层的节点if (bt == NULL){return;}queue<BTNode *> nodeQueue;nodeQueue.push(bt);nodeQueue.push(NULL); //放入空节点,作为层的结束符while (nodeQueue.size()){BTNode *pNode = nodeQueue.front(); //取队首元素nodeQueue.pop();  //必须出队列if (pNode)  //该节点非空{cout << pNode->data << ' ';cur.push_back(pNode->data);if (pNode->lchild)  //左孩子{nodeQueue.push(pNode->lchild);}if (pNode->rchild)   //右孩子{nodeQueue.push(pNode->rchild);}}//如果结点为空并且队列非空,则是一行访问结束,下一行的入队列结束,因此压入一个空指针  //若队列也是空,则说明已访问完毕else {result.push_back(cur);cur.resize(0);if (nodeQueue.size())nodeQueue.push(NULL);cout << endl;}}//for (int i = 0; i < result.size(); i++)//{//  vector<int>a = result[i];//  for (int j = 0; j < a.size(); j++)//  {//      //cout << a[j] << ' ';//      printf("%c ", a[j]);//  }//  cout << endl;//}
}

转载请注明出处:
CSDN:楼上小宇_home:http://blog.csdn.net/sty945

关于二叉树的层次遍历的花样(c++实现)相关推荐

  1. leetcode-102 二叉树的层次遍历

    给定一个二叉树,返回其按层次遍历的节点值. (即逐层地,从左到右访问所有节点). 例如: 给定二叉树: [3,9,20,null,null,15,7] 3 / \ 9 20 / \ 15 7 返回其层 ...

  2. 【每日一算法】二叉树的层次遍历 II

    每日一算法-二叉树的层次遍历 II 题目 给定一个二叉树,返回其节点值自底向上的层次遍历. (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历) 例如: 给定二叉树 [3,9,20,null,n ...

  3. c++根据二叉树的层次遍历建立二叉树_LeetCode | 102.二叉树的层次遍历

    这次来写一下 LeetCode 的第 102 题,二叉树的层次遍历. 题目描述 题目直接从 LeetCode 上截图过来,题目如下: 102.二叉树的层次遍历题目 上面的题就是 二叉树的层次遍历 题目 ...

  4. 七十七、 二叉树的层次遍历和最大深度

    @Author:Runsen 在讲解二叉树的时候,提到二叉树的遍历除了前中后序遍历,还有层次遍历. 前中后序这三种遍历方法以及可以通过递归的方式实现了,那么今天就来讲讲层次遍历吧! 文章目录 Leet ...

  5. 二叉树的层次遍历_【腾讯面试热身题】二叉树层次遍历(动画展示)

    二叉树的层次遍历同时涉及到树和队列两种数据结构的操作,因此大厂很喜欢用来作为面试的热身题.作者不少去腾讯的小伙伴,都反映,这种题一定要非常熟练,不然会被直接pass. 1 题目描述 给定一个二叉树,按 ...

  6. 数据结构——二叉树的层次遍历进阶

    之前的一个博客 数据结构--二叉树的层次遍历看完这个,可以简单实现下面的问题 问题: 1.计算二叉树的最大宽度(二叉树的最大宽度是指二叉树所有层中结点个数的最大值. 2.用按层次顺序遍历二叉树的方法, ...

  7. 69. 二叉树的层次遍历Python实现

    '''69. 二叉树的层次遍历 描述 给出一棵二叉树,返回其节点值的层次遍历(逐层从左往右访问)您在真实的面试中是否遇到过这个题? 样例 给一棵二叉树 {3,9,20,#,#,15,7} :3/ \ ...

  8. 二叉树层次遍历c语言_每日一道 LeetCode (23):二叉树的层次遍历 II

    ❝ 每天 3 分钟,走上算法的逆袭之路. ❞ 前文合集 每日一道 LeetCode 前文合集 代码仓库 GitHub:https://github.com/meteor1993/LeetCode Gi ...

  9. leetcode 102 java_Java实现 LeetCode 102 二叉树的层次遍历

    102. 二叉树的层次遍历 给定一个二叉树,返回其按层次遍历的节点值. (即逐层地,从左到右访问所有节点). 例如: 给定二叉树: [3,9,20,null,null,15,7], 3 / 9 20 ...

最新文章

  1. 梅尔频率倒谱系数(MFCC)资源
  2. 软件质量没有银弹:阿里巴巴的25个技术实践与坑
  3. Hive之 hive-1.2.1 + hadoop 2.7.4 集群安装
  4. 【AI不惑境】模型压缩中知识蒸馏技术原理及其发展现状和展望
  5. [MEGA DEAL] Ultimate SQL Bootcamp认证捆绑包(98%)
  6. JavaSE——常用类库(上)(泛型、Objects、Math、ArraysBigDecimal类)
  7. 23种设计模式之享元模式
  8. 《知识图谱》2020综述论文,18位作者, 130页pdf,547篇参考文献
  9. C++ Primer Plus 随记(第八章)
  10. Python:如何安装与使用 pip
  11. Spring(四):面向切面编程AOP
  12. JSONObject简单测试使用
  13. 2010年的20款游戏
  14. 怎么用spss做冗余分析_【攻略】手把手教你怎么用SPSS做统计分析
  15. 超强PHP集成开发工具:phpDesigner v7.2.1 最新版下载(附注册机)
  16. java 背单词系统_基于JAVA模拟背单词系统(含源文件)
  17. 戴德金--连续性和无理数--我自己做的中文翻译第1页
  18. 用freemarker生成word文档,并插入图片
  19. 苹果开放降级_苹果降级对手机有什么坏处
  20. linux 下vim中关于删除某段,某行,或全部删除的命令

热门文章

  1. linux/docker个人服务器项目中文变问号??,时间差8小时问题解决方法,最新,最有效
  2. Go 学习笔记(80)— Go 标准库 container/list(单链表、双链表)
  3. jieba分词流程及部分源码解读(一)
  4. Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))) TNS-12541: TNS:no li
  5. LeetCode中等题之重排数字的最小值
  6. 手机与Camera CCM技术发展趋势
  7. 2021年大数据Spark(三十九):SparkStreaming实战案例四 窗口函数
  8. C++ multimap 的使用
  9. android.mk 里面内容介绍
  10. postgreSQL外键引用查询 查询外键被那些表占用