树和二叉树的先、中、后序遍历

本文详细介绍了树的概念,包括结点的度、层次和深度,以及有序树和m叉树。重点讨论了二叉树的定义、存储结构和遍历方式,包括顺序存储和链式存储。文中还通过实例演示了先序、中序和后序遍历,并提供了Java代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、树的一些概念:

1、结点的度与树的度:
  • 结点的度:结点拥有的子树的数目(度为0的结点称为叶子结点)
  • 树的度:树内各结点的度的最大值
    在这里插入图片描述
2、结点的层次(level)和树的深度(depth)
  • 结点的层次:从根开始定义,层次数为1的结点是根结点。
  • 树的深度:树中结点的最大层次数称为树的深度或高度
    在这里插入图片描述
3、有序树、m叉树,森林
  • 有序树:树中结点的各子树看成是从左至右有次序的。
    在这里插入图片描述
  • m叉树:树中所有结点最大度数为m的有序数称为m叉树
  • 森林在这里插入图片描述

二、二叉树

1、概念
  • 二叉树
    每个结点的度均不超过2的有序树
    在这里插入图片描述
  • 满二叉树
    高度为k并且有2k+1 -1个结点的二叉树
    在满二叉树中,每层结点都达到最大数
  • 完全二叉树
    若在一棵满二叉树中,在最下层从最右侧起去掉相邻的若干叶子结点,得到的二叉树即为完全二叉树
    在这里插入图片描述
2、二叉树的存储结构
  • 顺序存储结构
    在这里插入图片描述
    这种存储方式对于满二叉树和完全二叉树是非常适合也是高效方便的。
    但是日常中更常出现的是一般二叉树,对于一般二叉树,必须用“虚结点”将一棵二叉树不成一棵完全二叉树,否则无法确定结点之间的前驱后续关系,但是这样会造成空间浪费,例如:
    在这里插入图片描述
  • 链式存储结构
    在这里插入图片描述
    其中Data存储的是数据,lChild存储的是左孩子,rChild存储的是右孩子,三叉链表中,增加一个指针域parent指向父节点
3、遍历

遍历就是按照某种次序访问树中的所有结点,且每个结点恰好访问一次。
树的遍历也可以看成是认为的将非线性结构线性化。

将整个二叉树看做是三部分,根,左子树、右子树
如果规定先遍历左子树再遍历右子树,那么根据根的遍历顺序有三种遍历方式

  • 先序遍历:根 左子树 右子树

  • 中序遍历:左子树 根 右子树

  • 后序遍历:左子树 根 右子树
    示例:
    在这里插入图片描述
    先序遍历:1 4 5 2 3 6 7
    中序遍历࿱

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值