C# 树

一、树的基本知识

 定义:

树是由n(n>=0)个结点组成的有限集合(n=0时称作空树),包含一个根结点和零或若干棵互不相干的子树。

非空树有以下几个特点:

  1. 有且仅有一个根节点

  2. 没有后继的节点称为“叶子节点”,有后继的节点称为“分子节点”

  3. 当树的结点数n>1时,根结点之外的其他结点可以分为m(m>=1)个互不相交的集合T1,T2,T3.。。。Tm,其中每个集合Ti(1<=i<=m)具有与树T相同的树结构,称为子树。每颗子树的根结点有且仅有一个直接的前驱结点。 

术语:

结点:树的数据元素

结点的度:结点挂接的子树数

结点的层次:从根节点到该结点的层数

路径:顺着连接节点的边从一个节点到另一个节点,所经历的节点顺序

根节点:树最上面的节点称为根节点,一棵树只有一个根节点,而且根到任何一个节点有且只有一条路径

父节点:每个节点都有一条边向上连接到另一个节点,这个节点就称是下面的节点的父节点

子节点:每个节点都有一条边向下连接到另一个节点,下面的节点称为该节点的子节点

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

子树:每个节点都可以作为一个子树的根,它和它所有的子节点,子节点的节点组合起来就是一个子树

树的层次:树有几层就有几个层次

树的深度:根节点的最大层次

 二、二叉树

定义:

二叉树是n个结点的有限集合,n=0时该集合为空集(称为空二叉树),或者由一个根结点和两棵互不相交的、分别称为根结点的左子树和右子树的二叉树组成。

特点:

  • 每个节点最多2课子树,即二叉树不存在度数大于2的节点
  • 它是有序树、左子树、右子树是顺序的,不能交换次序
  • 即使某一个节点只有一颗子树,也要确定它是左子树还是右子树

 五种基本形式:

  1. 空二叉树
  2. 只有一个根节点
  3. 根节点只有左子树
  4. 根节点只有右子树
  5. 根节点有左子树和右子树

 特殊的二叉树: 

  1. 斜树:左斜树和右斜树

  2. 满二叉树

  3. 完全二叉树:对一棵具有n个结点的二叉树按层序编号,如果编号为i (1≤i≤n)的结点与同样深度的满二叉树中编号为i的结点在二叉树中位置完全相同,则这棵二叉树称为完全二叉树。

 二叉树性质:

  1. 在二叉树的第i层上最多有2^{i-1}​​ 个结点(i>=1)
  2. 深度为k的二叉树至多有2^k-1个结点
  3. 对于一个完全二叉树,假设它有n个结点,对结点进行从1开始编号,对任一结点i满足下面

      a,它的双亲是结点 i/2  (除了i=1的情况)

      b,左孩子是 2i  右孩子是 2i+1

      c,如果2i>n 说明无左孩子   2i+1>n 说明无右孩子 

 二叉树存储结构:

一般的树来说是一对多的关系,使用顺序结构存储起来比较困难,但是二叉树是一种特殊的树,每个结点最多有两个子节点,并且子节点有左右之分,并且兄弟,父亲,孩子可以很方便的通过编号得到,所以我们使用顺序存储结构使用二叉树的存储。

 顺序存储一般只用于完全二叉树

二叉树链表存储:二叉树每个结点最多有两个孩子,所以为它设计一个数据域和两个指针域,我们称这样的链表为二叉链表。

下文:http://t.csdn.cn/k8D3xicon-default.png?t=N2N8http://t.csdn.cn/k8D3x

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值