树与树的表示

Posted zhengxin909

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了树与树的表示相关的知识,希望对你有一定的参考价值。

typedef struct LNode *List;

struct Lnode {

  ElementType Element[MaxSize];

  int length;

};

 

静态查找:

  方法1:顺序查找(时间复杂度为O(n))

int SequentialSearch (List Tbl, ElementType K){

  //在Element[1] - Element[n]中查找关键字为K的数据元素

  int i;

  Tbl->Element[0] = K;  //建立哨兵
  for (i=Tbl->length; Tbl->Element[i] != K; i--);

  return i;  //查找成功返回所在单元下标,不成功返回0
}

无哨兵

int SequentialSearch (List Tbl, ElementType K){

  //在Element[1] - Element[n]中查找关键字为K的数据元素

  int i;

  for (i=Tbl->length; i>0 && Tbl->Element[i] != K; i--);

  return i;  //查找成功返回所在单元下标,不成功返回0

}

 

  方法2:二分查找(时间复杂度为O(logN))

int BinarySearch (List Tbl, ElementType K){

  //在表Tbl中查找关键字为K的数据元素

  int left, right, mid, NoFound = -1;

  left = 1;  //初始左边界

  right = Tbl->length;  //初始右边界

  while (left <= right) {

    mid = (left+right) / 2;  //计算中间元素坐标

    if (K < Tbl->Element[mid])  right = mid -1;  //调整右边界

    else if (K > Tbl->Element[mid])  left = mid + 1;  //调整左边界

    else return mid;  //查找成功,返回数据元素的下标

  }

  return NotFound;  //查找不成功,返回-1

}

 

二分查找判定树:

(1)判定树上每个节点需要查找的次数刚好为该结点所在的层数;

(2)查找成功时查找次数不会超过判定树的深度

(3)n个结点的判定树的深度为[log2n]+1

 

(树)是非线性数据结构。

树:n个结点构成的有限集合

 当n = 0时,称为空树

 对于任一颗非空树,他具备以下性质:

  (1)树中有一个称为“根(Root)”的特殊节点,用r表示

  (2)其余结点可分为m个互不相交的有限集Ti,称为原来树的“子树(subTree)”

  (3)子树是不相交的

  (4)除根节点外,每个结点有且仅有一个父结点

  (5)一棵N个结点的树有N-1条边

  (6)树是保证结点连通的最小的连接方式

树的一些基本术语:

(1)结点的度:结点的子树个数

(2)树的度:树的所有结点中最大的度数

(3)叶结点:度为0的结点

(4)父结点:有子树的结点是其子树的根节点的父结点

(5)子结点:若A结点是B结点的父结点,则称B结点是A结点的子结点;子结点也称孩子节点

(6)兄弟结点:具有同一父结点的各节点彼此是兄弟结点

(7)路径和路径的长度:路径所包含边的个数为路径的长度

(8)祖先结点:沿树根到某一结点路径上的所有结点都是这个结点的祖先结点

(9)子孙结点:某一结点的子树中的所有结点是这个结点的子孙

(10)结点的层次:规定根节点在1层,其他任一结点的层数是其父结点的层数加1

(11)树的深度:树中所有结点中的最大层次是这棵树的深度

 

树的表示

儿子-兄弟表示法:每一个结构都是统一的,空间浪费不大,真正空的域为n+1

技术图片

 

 

以上是关于树与树的表示的主要内容,如果未能解决你的问题,请参考以下文章

树的存储结构及二叉树与树的转换

数据结构树与树的表示二叉树存储结构及其遍历二叉搜索树平衡二叉树堆哈夫曼树与哈夫曼编码集合及其运算

数据结构与算法笔记(十三)—— 树与树的算法

Python树与树算法

树与树算法

树与树算法