树结构介绍

一、树

在谈二叉树前先谈下树和图的概念

树:不包含回路的连通无向图(树是一种简单的非线性结构)

在这里插入图片描述

树有着不包含回路这个特点,所以树就被赋予了很多特性

1、一棵树中任意两个节点有且仅有唯一的一条路径连通

2、一棵树如果有n个节点,那它一定恰好有n-1条边

3、在一棵树中加一条边将会构成一个回路

4、树中有且仅有一个没有前驱的节点称为根节点

在对树进行讨论的时候将树中的每个点称为节点,

根节点:没有父节点的节点

叶节点:没有子节点的节点

内部节点:一个节点既不是根节点也不是叶节点

每个节点还有深度,比如上图左边的树的4号节点深度是3(深度是指从根节点到这个节点的层数,根节点为第一层)

二、二叉树

1.基本概念:

二叉树是一种非线性结构,二叉树是递归定义的,其节点有左右子树之分

二叉树的存储结构:
二叉树通常采用链式存储结构,存储节点由数据域和指针域(指针域:左指针域和右指针域)组成,二叉树的链式存储结构也称为二叉链表,对满二叉树和完全二叉树可按层次进行顺序存储

特点:

1、每个节点最多有两颗子树

2、左子树和右子树是有顺序的,次序不能颠倒

3、即使某节点只有一个子树,也要区分左右子树

4、二叉树可为空,空的二叉树没有节点,非空二叉树有且仅有一个根节点

二叉树中有两种特殊的二叉树:满二叉树、完全二叉树

满二叉树:
二叉树中每个内部节点都有存在左子树和右子树(或者说满二叉树所有的叶节点都有同样的深度),满二叉树一定是完全二叉树,但完全二叉树不一定是满二叉树(满二叉树的严格的定义是:一颗深度为h且有2^h -1个节点的二叉树)

在这里插入图片描述

完全二叉树:
第一种解释:如果一颗二叉树除最右边位置上有一个或几个叶节点缺少外,其他是丰满的那么这样的二叉树就是完全二叉树(这句话不太好理解),看下面第二种解释。

第二种解释:除第h层外,其他各层(1到h-1)的节点数都达到最大个数,第h层从右向左连续缺若干节点,则这个二叉树就是完全二叉树。也就是说如果一个节点有右子节点,那么它一定也有左子节点。

第三种解释:除最后一层外,每一层上的节点数均达到最大值,在最后一层上只缺少右边的若干节点。

完全二叉树的形状类似于下图:

在这里插入图片描述

为了方便理解请看下图(个人理解:完全二叉树就是从上往下填节点,从左往右填,填满了一层再填下一层)

在这里插入图片描述

2.二叉树相关词语解释:

节点的权:当前节点的值;

节点的度:节点拥有的子树的数目;

叶子节点:度为0的节点(tips:在任意一个二叉树中,度为0的叶子节点总是比度为2的节点多一个);

分支节点:度不为0的节点;

树的度:树中节点的最大的度;

层次:根节点的层次为1,其余节点的层次等于该节点的双亲节点的层次加1;

树的高度:树中节点的最大层次;

3.二叉树基本性质:

性质1:在二叉树的第k层上至多有2k-1个节点(k>=1)

性质2:在深度为m的二叉树至多有2m-1个节点

性质3:对任意一颗二叉树,度为0的节点(即叶子节点)总是比度为2的节点多一个

性质4:具有n个节点的完全二叉树的深度至少为[log2n]+1,其中[log2n]表示log2n的整数部分

存储方式
存储的方式和图一样,有链表和数组两种,用数组存访问速度快,但插入、删除节点操作就比较费时了。实际中更多的是用链来表示二叉树。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@来杯咖啡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值