认识二叉树

树:

非线性的数据结构

1、特点:

  • 每个结点有零个或多个子节点
  • 没有父节点的称为根节点
  • 非根节点有且只要一个父节点
  • 每个子节点分为多个不相交的子树
  • 一颗N个结点的树有N-1条边

2、概念(重要)

在这里插入图片描述

  • 节点的度:一个节点含有的子树的个数称为该节点的度; 如上图:A的为6

  • 树的度:一棵树中,最大的节点的度称为树的度; 如上图:树的度为6

  • 叶子节点或终端节点:度为0的节点称为叶节点; 如上图:B、C、H、I…等节点为叶节点

  • 双亲节点或父节点:若一个节点含有子节点,则这个节点称为其子节点的父节点; 如上图:A是B的父节点

  • 孩子节点或子节点:一个节点含有的子树的根节点称为该节点的子节点; 如上图:B是A的孩子节点

  • 根结点:一棵树中,没有双亲结点的结点;如上图:A

  • 节点的层次:从根开始定义起,根为第1层,根的子节点为第2层,以此类推;

  • 树的高度或深度:树中节点的最大层次; 如上图:树的高度为4

3、树的表示形式

class Node {
    int value; // 树中存储的数据
    Node firstChild; // 第一个孩子引用
    Node nextBrother; // 下一个兄弟引用
}

在这里插入图片描述

  • 树的应用: 文件系统的管理

二叉树

1、二叉树的存储形式

  • 顺序存储:用堆 一般存储完全二叉树(数组)
  • 链式存储:
    (1)三叉链表
    数据域 左孩子 右孩子 双亲
    (2)二叉链表
    数据域 左孩子 右孩子

2、特点

  1. 每个结点最多有两棵子树,即二叉树不存在度大于 2 的结点。

  2. 二叉树的子树有左右之分,其子树的次序不能颠倒。
    在这里插入图片描述

3、特殊的二叉树

  • 满二叉树:
    一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是满二叉树。即:
    若一个二叉树的层数为K,且结点总数是(2^k) -1 ,则它就是满二叉树

  • 完全二叉树:
    对于深度为K的,有n个结点的二叉树,当且仅当其每一个结点都与深度为K的满二叉树中编号从1至n的结点一一对应时称之为完全二叉树。
    满二叉树是一种特殊的完全二叉树。

在这里插入图片描述

3、二叉树的表现形式

// 二叉链表
 class Node {
    int val; // 数据域
    Node left; // 左孩子的引用,常常代表左孩子为根的整棵左子树
    Node right; // 右孩子的引用,常常代表右孩子为根的整棵右子树
}

4、二叉树的遍历

  • 前序遍历: 根-》左子树-》右子树
  • 中序遍历:左子树-》根-》右子树
  • 后序遍历: 左子树-》右子树-》根
    例如:
    在这里插入图片描述
  • 前序:a b d e h c f g
  • 中序:d b e h a f c g
  • 后序:d h e b f g c a

如何遍历:递归(大问题化小问题)

  • 递归的思想:
    (1)终止条件
    (2)调用自己
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值