二叉树的遍历——层序遍历
一、之前写了二叉树的三种遍历方法:有先序遍历、中序遍历、后序遍历,这三种方法都是用递归的方式来遍历二叉树的。层序遍历则不是使用递归来遍历,而是使用队列的来实现遍历:
void LevelTreeOrder(BTNode* root)
{Queue q;QueueInit(&q);if(root)QUueuePush(&q,root);while(!EmptyQueue(&q))
{BTNode* front = QueueFront(&q);printf("%d ",front->data);QueuePop(&q);if(front->left)QueuePush(&q,front->left);if(front->right)QueuePush(&q,front->right);
}printf("\n");QueueDestroy(&q);
}
代码就是如上所示,前提是你要有一个写好的队列的代码。
二、我们可以使用层序遍历来判断完全二叉树
借助于上面的写好的层序遍历,我们可以写出
void isTreeComplete(BTNode* root)
{Queue q;QueueInit(&q);if(root)QUueuePush(&q,root);while(!EmptyQueue(&q))
{BTNode* front = QueueFront(&q);QueuePop(&q);if(front==NULL)break;else{QueuePush(front->left);QueuePush(front->right);}
}while(!EmptyQueue(&q))
{BTNode* front = QueueFront(&q);QueuePop(&q);if(front){QueueDestroy(&q);return false;}}
QueueDestroy(&q);
return true;
}
三、判断所给的树是不是对称的树
题目要求给你一棵树,需要你判断是不是一颗对称的树:
bool _isSymmetric(struct TreeNode* root1,struct TreeNode* root2){if(root1 == NULL &&root2==NULL)return true;if(root1 == NULL || root2 ==NULL )return false;if(root1->val != root2->val)return false;return _isSymmetric(root1->left,root2->right)&&_isSymmetric(root1->right,root2->left);
}
bool isSymmetric(struct TreeNode* root){return !root || _isSymmetric(root->left,root->right);
}
和之前写的isSameTree的思路还是很像的;
二叉树的遍历——层序遍历相关推荐
- 数据结构实验之二叉树五:层序遍历 // oj3344 队列+二叉树 // 先序 --层次
原题链接:oj3344 数据结构实验之二叉树五:层序遍历 Description 已知一个按先序输入的字符序列,如abd,eg,cf,(其中,表示空结点).请建立二叉树并求二叉树的层次遍历序列. In ...
- tree traversal (树的遍历) - 层序遍历 (level order traversal) - 二叉树的层序遍历
tree traversal (树的遍历) - 层序遍历 (level order traversal) - 二叉树的层序遍历 1. tree traversal (树的遍历) 1.1 深度优先搜索 ...
- 3344 数据结构实验之二叉树五:层序遍历
数据结构实验之二叉树五:层序遍历 Time Limit: 1000MS Memory Limit: 65536KB Problem Description 已知一个按先序输入的字符序列,如abd,,e ...
- bartender一行打印两个二次开发_C++ 智能指针和二叉树:图解层序遍历和逐层打印二叉树...
作者:apocelipes 链接:https://www.cnblogs.com/apocelipes/p/10758692.html 二叉树是极为常见的数据结构,关于如何遍历其中元素的文章更是数不 ...
- 数据结构实验之二叉树五:层序遍历(STL和模拟队列两种方法)
Description 已知一个按先序输入的字符序列,如abd,eg,cf,(其中,表示空结点).请建立二叉树并求二叉树的层次遍历序列. Input 输入数据有多行,第一行是一个整数t (t<1 ...
- LeetCode 297. 二叉树的序列化与反序列化(前序遍历层序遍历)
文章目录 1. 题目 2. 解题 2.1 前序遍历 2.2 层序遍历 1. 题目 序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过 ...
- 二叉树三种递归和非递归遍历 层序遍历
以下为二叉树的三种遍历(中序,先序,后序)源码,和非递归遍历源码. 中序 递归遍历 public static void inorderTraversal(TreeNode root) {if(ro ...
- BFS(二)二叉树层序遍历(I、II)、二叉树锯齿形层序遍历、N叉树层序遍历
目录 102. 二叉树的层序遍历 107. 二叉树的层序遍历 II 103. 二叉树的锯齿形层序遍历 429. N 叉树的层序遍历 102. 二叉树的层序遍历 给你二叉树的根节点 root ,返回其节 ...
- JAVA 二叉树 常见操作合集(前中后序递归非递归遍历 层序遍历 求深度宽度 判断兄弟结点 堂兄弟节点)
今天复习了二叉树的相关操作,整理归纳如下. 二叉树结点定义 //节点类private static class TreeNode{private int val = 0;private TreeNod ...
最新文章
- 能上qq打不开网页,金山毒霸帮你解决
- javascript:void(0)与#区别
- 在asp.net中使用加密数据库联接字符串
- linux基础(1)-yum源配置
- arm汇编解析—qnnpack卷积实现
- 微服务升级_SpringCloud Alibaba工作笔记0016---Nacos之服务提供者注册
- 钩子编程(HOOK) 安装进程内键盘钩子 (1)
- Mysql5.6 自动化部署
- 解决办法:error: ‘unordered_map’ in namespace ‘std’ does not name a template type
- 计算机c盘要满了电脑会卡吗,C盘满了 电脑卡顿了,怎么清理空间
- 深入理解JVM虚拟机1:JVM内存的结构与消失的永久代
- C++ 二叉树求叶子结点数及输出叶子结点的路径
- 直线检测-Radon变换、Hough变换
- java jbutton icon 边框_Swing开发JButton图标效果篇
- 如何让自己每天按时睡觉
- 边写SQL边学数据库入门实验2(持续更新)
- 从Windows用scp往linux里传输文件
- 零点定理的奇妙应用:平分面积的直线
- 【全文检索_01】核心理论
- 2023年十大流媒体发展趋势展望
热门文章
- windows电脑重装系统步骤、cmd常用命令等
- 一次性消费品商城小程序开发,生活更便捷
- 真正好用的mac版免费OCR文字识别转换工具
- java压缩文件,在线下载文件并压缩
- 多商户商城系统-v2.2.3版本发布
- 《构建之法》学习总结2——软件工程需求分析
- 脑洞 博弈 E. Competitive Seagulls 2017 ACM Arabella Collegiate Programming Contest
- 【0基础学java】教学日志:javaSE-面向对象6-面向对象前4章上机作业点评,主要涉及继承、封装、多态三个章节的内容
- 带您了解如何做好新媒体营销推广
- Python利用SMTP/IMTP制作简单邮件(QQ邮箱)发送程序(保姆级)