Java二叉树的遍历思想及核心代码实现

 更新时间:2019年01月03日 15:13:25   作者:sdr_zd  
今天小编就为大家分享一篇关于Java二叉树的遍历思想及核心代码实现,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

二叉树在计算机中的存储方式往往线性结构,线性存储分为顺序存储和链式存储,将二叉树按层序编号。

顺序结构:按编号的顺序进行存储,对于完全二叉树而言,顺序存储可以反映二叉树的逻辑,但是对于大多数的二叉树则无法反映其逻辑关系,不过可以用 ^ 来代替不存在的结点,但是如果这个树是一个右斜树,就非常浪费存储空间。所以二叉树的存储形式一般为链式存储结构。

链式存储:每一个结点都分有一个数据域(data)和两个指针域(lchild和rchild),指针域分别指向左孩子和右孩子,若为空则为null。遍历方式有四种:前序遍历、中序遍历、后序遍历及层序遍历,前三种遍历方式采用递归的思想进行遍历。

为方便理解,画一个树并结合代码

前序遍历:若二叉树为空则返回null,否则先访问根节点然后遍历左子树,再遍历右子树,如图:ABDGHCEIF

代码如下:

void PreOrderTraverse(BiTree T) {
 if(T == NULL) /*为空返回*/
 return;
 printf("%c",T->data); /*输出该结点的信息*/
 PreOrderTraverse(T->lchild); /*遍历左子树*/
 PreOrderTraverse(T->rchild); /*遍历右子树*/
}

中序遍历:若二叉树为空则返回null,否则从根节点出发访问左子树,然后访问根结点,最后访问右子树,如图:GDHBAEICF

代码如下:

void InOrderTraverse(BiTree T) {
 if(T == NULL) /*为空返回*/
 return;
 InOrderTraverse(T->lchild); /*遍历左子树*/
 printf("%c",T->data); /*输出该结点的信息*/
 InOrderTraverse(T->rchild); /*遍历右子树*/
}

后序遍历:若二叉树为空则返回null,否则以先叶子后结点的方式进行访问最后到根结点遍历结束,如图:GHDBIEFCA

代码如下:

void PostOrderTraverse(BiTree T) {
 if(T == NULL) /*为空返回*/
 return;
 PostOrderTraverse(T->lchild); /*遍历左子树*/
 PostOrderTraverse(T->rchild); /*遍历右子树*/
 printf("%c",T->data); /*输出该结点的信息*/
}

层序遍历:若二叉树为空则返回null,否则从第一层开始进行访问,如图:ABCDEFGHI,按编号进行输出或操作即可

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。如果你想了解更多相关内容请查看下面相关链接

相关文章

  • Java通过MySQL的加解密函数实现敏感字段存储

    Java通过MySQL的加解密函数实现敏感字段存储

    这篇文章主要介绍了如何在Java中MySQL的加解密函数实现敏感字段存储,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2022-03-03
  • java自定义线程池的原理简介

    java自定义线程池的原理简介

    这篇文章主要介绍了java自定义线程池的原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • SpringCloud之Hystrix的详细使用

    SpringCloud之Hystrix的详细使用

    熔断机制是应对雪崩效应的一种微服务链路保护机制,当扇出链路的某个微服务出错不可用或者响应时间太长,会进行服务的降级,进而熔断该节点微服务的调用,快速返回错误的相应信息,本文重点给大家介绍SpringCloud Hystrix使用,感兴趣的朋友一起看看吧
    2022-01-01
  • mybatis多对多关联实战教程(推荐)

    mybatis多对多关联实战教程(推荐)

    下面小编就为大家带来一篇mybatis多对多关联实战教程(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10
  • Java 中的注解详解及示例代码

    Java 中的注解详解及示例代码

    本文主要介绍Java 中的注解,这里提供了详细的相关资料,及示例代码,帮助大家学习理解,有兴趣的小伙伴可以参考下
    2016-08-08
  • spring boot 下支付宝的开箱既用环境

    spring boot 下支付宝的开箱既用环境

    这篇文章主要介绍了spring boot 下支付宝的开箱既用环境包括使用场景和使用技巧,非常不错,具有参考借鉴价值,需要的朋友参考下吧
    2017-10-10
  • SpringBoot如何实现持久化登录状态获取

    SpringBoot如何实现持久化登录状态获取

    这篇文章主要介绍了SpringBoot 如何实现持久化登录状态获取,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • Java如何获取当天零点和明天零点的时间和时间戳

    Java如何获取当天零点和明天零点的时间和时间戳

    这篇文章主要介绍了如何在Java中获取当天零点和明天零点的时间和时间戳,并提供了示例代码,新手小白完全可以通过文中介绍的代码实现,需要的朋友可以参考下
    2025-03-03
  • Java中Scanner的常用方法总结(一次学懂)

    Java中Scanner的常用方法总结(一次学懂)

    这篇文章主要给大家介绍了关于Java中Scanner常用方法的相关资料,Java中的Scanner是一个用于读取用户输入的类,它可以读取各种类型的数据,包括整数、浮点数、字符串等等,需要的朋友可以参考下
    2023-11-11
  • Java小程序赛马游戏实现过程详解

    Java小程序赛马游戏实现过程详解

    这篇文章主要介绍了Java小程序赛马游戏实现过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03

最新评论