二叉树的三种遍历方式

二叉树的简介:

二叉树是由一个根节点,一个左节点,一个右节点,一个个串联成的一个树状形数据结构。如下图所示:
在这里插入图片描述
满二叉树:一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是满二叉树。也就是说,如果一个二叉树的层数为K,且结点总数是(2^k) -1 ,则它就是满二叉树。
完全二叉树:完全二叉树是效率很高的数据结构,完全二叉树是由满二叉树而引出来的。若设二叉树的深度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边,这就是完全二叉树 要注意的是满二叉树是一种特殊的完全二叉树。
平衡二叉树是指在整个树中,小于节点值的值全放在节点的左节点,大于节点值的值放在右节点。

二叉树的三种遍历方式

一. 先序遍历 :遍历路径:根节点 ——左节点——右节点。
如下图所示:
在这里插入图片描述
按照先序遍历的规则。先创建一个实体类进行测试。
1.创建一个实体类,作为二叉树中的节点元素。
在这里插入图片描述
2.按照图中二叉树的组成方式,将一个个节点元素构成如上的二叉树。
在这里插入图片描述
3.按照先序遍历的规则将,创建一个递归方法:
在这里插入图片描述
4.程序结果执行如下:
在这里插入图片描述
对结果进行分析可知:

  1. 按照先序遍历的规则:输出根元素 15;
  2. 然后 根元素的左节点 14;
  3. 但是,左节点14又是当前节点的根节点,所以执行当前节点的左节点7;
  4. 由于节点7中不存在左右节点,返回节点14,执行14节点的右节点13;
  5. 当节点13执行完之后,根元素的左子树已经全部遍历结束,开始执行根元素的右节点19;
  6. 而又节点19又是当前节点的根节点,所以执行其左节点16;
  7. 节点16执行完之后,不存在左右节点。所以返回节点19,执行右节点20;

二. 中序遍历:左节点——根节点——右节点:
更换遍历方法如下:
在这里插入图片描述
执行结果为:
在这里插入图片描述
对结果进行分析:

  1. 按照中序遍历的规则,首先执行左节点14,但是左节点又是当前节点的根节点,转而执行当前节点的左节点7,而节点7之后无节点,输出节点7;
  2. 节点7输出之后,返回节点14;对于节点14,按照规则,已经执行了左节点,之后应该执行根节点14.
  3. 之后执行节点14的右节点13,而节点13之中不存在左节点,执行根节点13;
  4. 节点13中不存在右节点,返回到节点14,节点14已经执行完返回根节点15,根节点已经执行完左节点,之后执行根节点15;
  5. 根节点之后,转而执行右子树。执行节点19;而节点19又是当前节点的根节点,所以转而执行左节点16,而节点16不存在左右节点,所以执行输出16;
  6. 节点16执行完之后返回节点19,而执行输出19;
  7. 执行节点19的右节点20;

三.后序遍历:左子树——右子树——根节点
对遍历方式更换:
在这里插入图片描述
程序执行结果为:
在这里插入图片描述
在平衡二叉树中,其中序遍历就是对节点的升序排列:如下题:
在这里插入图片描述
根据题意:每次next()输出都将输出一个“最小值”。第一次输出一个最小值,第二次输出一个第二小的值。
根据二叉搜索树的性质,对于每一个基本节点而言,左子树就是存储小于节点的值。所以中序遍历中的左子树——根节点——右子树就是一个升序遍历。
对于这题,一个解题思路就是,首先用一个输出,存储其中序遍历的值,用next依次输出即可。

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值