顺着昨天的讲,我来讲有根树,存储结构。
一、父亲表示法,一般用来查找父亲,即查找根节点。但他很难找孩子。
->代码的简略:
struct tree{
int fat,data;//fat是father,即父亲结点
}a[1050];//结点总数视为1000个
二、相对应的,儿子表示法,即一个链表式的结构
这个比较用于表示一棵树,便于向下钻。
->代码:
typedef struct tree;//提前声明,不然会有问题
typedef tree *tr;//还是要声明一下的
struct tree{
int data;//值
tr a[10];//儿子(默认度为10)
};
tr t;//根结点
三、父亲孩子表示法,即两者结合体
->代码:
typedef struct tree;//提前声明,不然会有问题
typedef tree *tr;//还是要声明一下的
struct tree{
int data;//值
tr a[10];//儿子(默认度为10)
tr fat;//fat是father,即父亲结点
};
tr t;//根结点
四、孩子兄弟表达法
挺少用的,这个是确认第一个儿子,第一个兄弟。
->代码:
typedef struct tree; //提前声明,不然会有问题
typedef tree *tr; //还是要声明一下的
struct tree{
int data; //值
tr fc; //第一个儿子(first child)
tr bro;//bro是brother,即下一个兄弟结点
};
tr t;//根结点
五、邻接矩阵
这其实是图论的表示法,但这也可以用,就只是表示两结点间的关系。
这是以判断是否为父子关系,因为若要找到这个结点,并确认data,就很烦了,而且还要判断,就挺不舒服,所以用邻接矩阵,用空间换时间。
六、邻接表
这其实也是图论算法,主要用来确定儿子、叶子的,可以适当用儿子表示法代替,两者除了空间不一,其他是等价的。
今天也就到这了,每天更新500字的知识,或者一千字的代码,手也是挺累的。加油,明天见。