对于树的一些认识。 一般的树。

树的相关操作:
1.setNull(T) 建立一棵空树T
2.Root(x)或Root(T) 求结点x所在树的根结点,或者求树T的根结点。
3.Parent(T,x) 求树T中结点x的双亲结点。
4.Child(T,x,i) 求树T中结点x的第i个孩子结点。
5.RightSibling(T,x) 求树T中结点x右边的兄弟结点。
6.Insert(T,x,i,S) 把以S为根的树插入到树T中作为结点x的第i棵子树。
7.Delete(T,x,i) 删除树T中结点x的第i棵子树。
8.Traverse(T) 对一棵树进行遍历,即按照某个次序依次访问树中所有结点,每个结点仅被访问依次,得到一个由所有结点组成的序列。




树的几种存储结构。
1.多重链表表示方法:
基本描述:
a.定长链接点的多重链表表示
这种存取方法取树的度数作为每个链接点的指针域数目。但是,这样必然造成多数结点的度数可能小于树的度数,因而这种方法不太好。
主要实现代码:
#define MaxTreeD 100
typedef struct Node
{
  int iData;// 数据域存放整形数据。
  struct Node* child[MaxTreeD];
}DTREE;
b.不定长链接点的多重链表表示方法
这种存储方法每个链接点根据自己的度数作为指针域的数目。考虑到实际中还需要设置一个来存放结点度数的域,用来指明该结点的度数,即指明该结点中指针域的个数。
主要代码实现如下:
#define MaxTreeD 100
typedef struct Node
{
  int iData;
  int degree;// 用来存放每个结点的度数。
  struct Node* child[MaxTreeD];
}NTREE;
c.三重链表表示方法
基本描述:
这种存储方法是对树中每个结点除了数据域外设置3个指针域,其中1个指针域给出该结点的第一个孩子结点(即最左边那颗子树的根结点)所在链接点的地址
第二个指针域给出该结点双亲所在的结点地址,第三个指针域给出该结点右边第一个兄弟结点所在链接点的地址。如果相应位置不存在,则相应的位置上为空。
主要代码实现:
typedef struct Node
{
  int iData;
  struct Node* child,*parent,*brother;
}TTREE;
需要注意的是,这种存储方式中需要设置一个入口指针T。作为找到该链表的风向标。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值