在学习树的过程中发现,他们都有一个共同的特点,无论是在创建时还是遍历时,都是需要先父母再左孩子右孩子的顺序如图

层序遍历时顺序为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循环里,根据控制台输入的字符或者字符串先判断根节点有无左右孩子,若有则创建赋值并入队,若没有就让他的左孩子或者右孩子为空,如此循环往复,直到队列为空。

层序创建二叉树,层序遍历二叉树相关推荐

  1. 二叉树的层序创建和层序遍历(c++,c)

    层序遍历时顺序为A->B->C->D->E->F->G,先被访问的结点,他的孩子也是先被访问的,层序创建二叉树时,先创建的结点他的孩子也先创建,符合先进先出原则,因 ...

  2. 二叉树 1.0 -- 创建二叉树、遍历二叉树、二叉树常见问题求解

    树的结构主要是为了查找,这个主要是为了搜索,树的结构关注的不是增删查改 树 广义上面的树的结构我们不知道树的一个节点是有几个子节点的,所以这个时候我们需要定义的一种结构就是,一个节点的孩子是可以动态的 ...

  3. 【数据结构】——构建二叉树,遍历二叉树

    二叉树的数据结构: 1 typedef struct BiTree{ 2 char item; 3 struct BiTree *lchild,*rchild; 4 }BiTree; 构建一个二叉树: ...

  4. 二叉树的创建_大多数人都不会手写创建并遍历二叉树,一航这里帮你终结了

    创建二叉树.遍历二叉树.二叉树的最近公共祖先任何疑问.意见.建议请公众号留言或联系qq474356284先序.后序创建二叉树先中后层序遍历二叉树二叉树的最近公共祖先 输入格式: 创建二叉树时的输入: ...

  5. 二叉树的遍历 C/C++语言实现

    目录 1.二叉树的定义 2.二叉树的遍历 2.1.先序遍历 递归版 非递归版 2.2.中序遍历 递归版 非递归版 2.3.后序遍历 递归版 非递归版 2.4.层序遍历 3.二叉树的创建 4.二叉树的销 ...

  6. c++ stack 遍历_python实现二叉树的遍历以及其他基本操作

    主要内容: 二叉树遍历(先序.中序.后序.宽度优先遍历)的迭代实现和递归实现: 二叉树的深度,二叉树到叶子节点的所有路径. 首先,先定义二叉树类(python3),代码如下: class 内容1:二叉 ...

  7. php 实现二叉树的最大深度_python实现二叉树的遍历以及其他基本操作

    主要内容: 二叉树遍历(先序.中序.后序.宽度优先遍历)的迭代实现和递归实现: 二叉树的深度,二叉树到叶子节点的所有路径. 首先,先定义二叉树类(python3),代码如下: class TreeNo ...

  8. mysql 遍历二叉树_数据结构——树与二叉树的遍历

    目录 树 二叉树 二叉树的遍历 总结 参考资料 序 树是学习数据结构的时候非常重要的一个数据结构,尤其是二叉树更为重要.像Java的HashMap 就使用了红黑树,而Mysql的索引就使用到了B+树. ...

  9. 数据结构与算法之二叉树广度遍历、深度遍历总结

    什么是树,它是和链表一样都是一种抽象数据类型(ADT),包括数据结构和对数据的操作. 树是一种二维平面的数据结构结构,它也是由节点组成的,只是它的后继节点不止一个,而链表的后继节点只有一个. 树具有以 ...

  10. 二叉树的遍历操作-递归和非递归

    二叉树的遍历 二叉树的遍历是很常见的一种问题, 往常我们可以通过递归来实现二叉树的先序,中序以及后序的遍历操作, 但是将递归转化成非递归是件值得去思考的一件事, 接下来是具体实现 具体实现 二叉树的定 ...

最新文章

  1. 2022-2028年中国阻燃母料行业市场深度分析及发展规模预测报告
  2. vb mschart 坐标名称_最强干货来了:Grasshopper运算器名称总结(上篇)
  3. 04 列表的增删改查 常用方法 元祖 range
  4. CodeForces - 1341E Nastya and Unexpected Guest(01bfs)
  5. CaffeMFC:caffe.pb.h(2525): error C2059: syntax error : 'constant'
  6. System.getProperty()参数
  7. open函数返回-1_4.6 linux的系统调用执行探究(1)
  8. crontab 日志_聊聊老板让我删除日志文件那些事儿
  9. iconv 解决乱码问题
  10. html制作花样链接卡页面_网站404页面怎么做
  11. JS前台页面获取值的技巧
  12. 将shapefile文件加工为FBX文件、glb文件、gltf文件
  13. linux自动识别车牌设计,车牌检测和识别的Python应用软件实现
  14. 基于QlExpress实现薪资计算
  15. 中兴服务器车间,走进中兴通讯车间 探秘智能手机生产链(多图)
  16. 管理小结(一)明确团队的职责
  17. JAVA实现RS-485串口编程
  18. 狼人杀微信小程序项目实例(附源码)
  19. windows软件进行反汇编修复流程
  20. Google Pay 应用已经发布成功,调起支付回调失败

热门文章

  1. for循环的遍历的三种方式
  2. 布满开源社夏夜的 是志愿者们的萤火星光
  3. 学系统集成项目管理工程师(中项)系列16a_风险管理(上)
  4. Evensgn 剪树枝
  5. XJCS#4. 整理花名册
  6. caffe fine-tune策略
  7. 相机标定之畸变矫正与反畸变计算
  8. 在Qt中使部分组件透明化
  9. Amazon ec2 云服务免费一年
  10. 使用Animator控制动画的切换