层序创建二叉树,层序遍历二叉树
在学习树的过程中发现,他们都有一个共同的特点,无论是在创建时还是遍历时,都是需要先父母再左孩子右孩子的顺序如图
层序遍历时顺序为A->B->C->D->E->F->G,先被访问的结点,他的孩子也是先被访问的,层序创建二叉树时,先创建的结点他的孩子也先创建,符合先进先出原则,因此可以用队列来实现。所以他们的共同点就是都可以用队列来帮助实现。
那就先从较为简单的遍历开始吧!
1.层序遍历
思路:刚才分析时我们发现可用队列,第一步,若根节点不为空我们先让根节点入队,判断他的左右孩子是否为空,若不为空打印根节点并让他的孩子入队。
第二步,取出队列中第一个结点并打印,判断他是否有左右孩子,若有让其孩子入队。
重复第二步直到队列为空。
代码:
static void levelOrder(Node t){LinkedList<Node> q=new LinkedList();//声明队列q.add(t);//根节点入队应该判断一下根节点是否为空,没写懒了while(!q.isEmpty()) {Node p = q.pollFirst();//每次都取出对头结点System.out.print(p.data+" ");if(p.lchild!=null){//若有左孩子左孩子入队q.add(p.lchild);}if(p.rchild!=null){//若有右孩子右孩子入队q.add(p.rchild);}}}
2.层序创建二叉树
说实话我学习过程中没遇到过层序创建的,但是刷题遇见了一个输入是层序输入的,我当时就想层序怎么创建二叉树呢?其实和层序遍历差不多都是一个思想,先创建的他的孩子也先创建。
//层序创建二叉树static Node cerate_LevelTree(Node node){LinkedList<Node> q=new LinkedList<Node>();//还是建个队列String ch;Node p;Scanner scanner=new Scanner(System.in);ch=scanner.nextLine();//从控制台取出输入第一个结点if(!ch.equals("null")){//若不为空则让他入队node=new Node();//生成一个结点node.data=ch;//把输入的数据存进去q.add(node);}while(!q.isEmpty()){ch=scanner.nextLine();//再从控制台取元素p=q.pollFirst();//每次都取出对头结点if(ch.equals("null")){//若不为空则证明有左孩子p.lchild=null;}else{p.lchild=new Node();//创建左孩子并入队p.lchild.data=ch;q.add(p.lchild);}ch=scanner.nextLine();//再取出一个元素if(ch.equals("null")){//若不为空则证明有右孩子p.rchild=null;}else{p.rchild=new Node();//创建右孩子并入队p.rchild.data=ch;q.add(p.rchild);}}return node;}
根据代码,除了根节点都在while循环里,根据控制台输入的字符或者字符串先判断根节点有无左右孩子,若有则创建赋值并入队,若没有就让他的左孩子或者右孩子为空,如此循环往复,直到队列为空。
层序创建二叉树,层序遍历二叉树相关推荐
- 二叉树的层序创建和层序遍历(c++,c)
层序遍历时顺序为A->B->C->D->E->F->G,先被访问的结点,他的孩子也是先被访问的,层序创建二叉树时,先创建的结点他的孩子也先创建,符合先进先出原则,因 ...
- 二叉树 1.0 -- 创建二叉树、遍历二叉树、二叉树常见问题求解
树的结构主要是为了查找,这个主要是为了搜索,树的结构关注的不是增删查改 树 广义上面的树的结构我们不知道树的一个节点是有几个子节点的,所以这个时候我们需要定义的一种结构就是,一个节点的孩子是可以动态的 ...
- 【数据结构】——构建二叉树,遍历二叉树
二叉树的数据结构: 1 typedef struct BiTree{ 2 char item; 3 struct BiTree *lchild,*rchild; 4 }BiTree; 构建一个二叉树: ...
- 二叉树的创建_大多数人都不会手写创建并遍历二叉树,一航这里帮你终结了
创建二叉树.遍历二叉树.二叉树的最近公共祖先任何疑问.意见.建议请公众号留言或联系qq474356284先序.后序创建二叉树先中后层序遍历二叉树二叉树的最近公共祖先 输入格式: 创建二叉树时的输入: ...
- 二叉树的遍历 C/C++语言实现
目录 1.二叉树的定义 2.二叉树的遍历 2.1.先序遍历 递归版 非递归版 2.2.中序遍历 递归版 非递归版 2.3.后序遍历 递归版 非递归版 2.4.层序遍历 3.二叉树的创建 4.二叉树的销 ...
- c++ stack 遍历_python实现二叉树的遍历以及其他基本操作
主要内容: 二叉树遍历(先序.中序.后序.宽度优先遍历)的迭代实现和递归实现: 二叉树的深度,二叉树到叶子节点的所有路径. 首先,先定义二叉树类(python3),代码如下: class 内容1:二叉 ...
- php 实现二叉树的最大深度_python实现二叉树的遍历以及其他基本操作
主要内容: 二叉树遍历(先序.中序.后序.宽度优先遍历)的迭代实现和递归实现: 二叉树的深度,二叉树到叶子节点的所有路径. 首先,先定义二叉树类(python3),代码如下: class TreeNo ...
- mysql 遍历二叉树_数据结构——树与二叉树的遍历
目录 树 二叉树 二叉树的遍历 总结 参考资料 序 树是学习数据结构的时候非常重要的一个数据结构,尤其是二叉树更为重要.像Java的HashMap 就使用了红黑树,而Mysql的索引就使用到了B+树. ...
- 数据结构与算法之二叉树广度遍历、深度遍历总结
什么是树,它是和链表一样都是一种抽象数据类型(ADT),包括数据结构和对数据的操作. 树是一种二维平面的数据结构结构,它也是由节点组成的,只是它的后继节点不止一个,而链表的后继节点只有一个. 树具有以 ...
- 二叉树的遍历操作-递归和非递归
二叉树的遍历 二叉树的遍历是很常见的一种问题, 往常我们可以通过递归来实现二叉树的先序,中序以及后序的遍历操作, 但是将递归转化成非递归是件值得去思考的一件事, 接下来是具体实现 具体实现 二叉树的定 ...
最新文章
- 2022-2028年中国阻燃母料行业市场深度分析及发展规模预测报告
- vb mschart 坐标名称_最强干货来了:Grasshopper运算器名称总结(上篇)
- 04 列表的增删改查 常用方法 元祖 range
- CodeForces - 1341E Nastya and Unexpected Guest(01bfs)
- CaffeMFC:caffe.pb.h(2525): error C2059: syntax error : 'constant'
- System.getProperty()参数
- open函数返回-1_4.6 linux的系统调用执行探究(1)
- crontab 日志_聊聊老板让我删除日志文件那些事儿
- iconv 解决乱码问题
- html制作花样链接卡页面_网站404页面怎么做
- JS前台页面获取值的技巧
- 将shapefile文件加工为FBX文件、glb文件、gltf文件
- linux自动识别车牌设计,车牌检测和识别的Python应用软件实现
- 基于QlExpress实现薪资计算
- 中兴服务器车间,走进中兴通讯车间 探秘智能手机生产链(多图)
- 管理小结(一)明确团队的职责
- JAVA实现RS-485串口编程
- 狼人杀微信小程序项目实例(附源码)
- windows软件进行反汇编修复流程
- Google Pay 应用已经发布成功,调起支付回调失败