树的相关操作:
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。作为找到该链表的风向标。
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。作为找到该链表的风向标。