赞
踩
树是n (n>0)个结点的有限集合 n = 0 就是空树了
树有一下几个条件.
例子均是以 书中图 5-2 a图 为例子
顺序 中 左 右
A B D E F C G
这里注意每次进入一个子树均按中左右顺序进行遍历
左右中
D E F B G C A
一层一层来的
ABCDEFG
struct Node{
int data;
int position;
}
上个图
存储结构是数组
优点是找双亲节点方便
- 孩子表示法
- 多重链表表示法
这个就更简单了
struct Node1{
int data;
int degree;
Node* child2;
Node* child3;
Node* child4;
Node* child5;
}
struct Node2{
int data;
Node* child2;
Node* child3;
Node* child4;
Node* child5;
Node* child6;
}
Node1 中指针域指向该节点的所有孩子节点 指针数等于该节点的度 很少采用 因为节点的度不同时,很难操作
Node2 中指针域指向该节点的所有孩子节点,指针数等于树的度,浪费了存储空间便于操作
那么这四个节点存储方式为
struct Node{
int data;
Node* child;
}
构成一个数组,然后指针域指向他的孩子节点
上图
优点是找兄弟节点方便
- 双亲孩子表示法
这个就是双亲表示法和孩子链表表示法的综合 直接上图 不解释
查找双亲兄弟都方便
- 孩子兄弟表示法
节点结构
struct Node{
int data;
Node* child;//指向第一个孩子节点
Node* rightBrother;//指向右兄弟节点
}
这个的意思就是假如节点 A 的孩子节点是BCD 那么A的孩子节点指针指向的是B(也就是第一个) 右兄弟指针指向NULL(跟结点没有兄弟)
然后 B的孩子节点指向NULL (他没有孩子节点) B的右兄弟指向 C 同理 C的右兄弟执行D
-
上图
这种方法的有点是便于实现树的各种操作
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。