数据结构-3. 树

3. 树

3.1 父指针表示法

 1 class Gentree{
 2     private:
 3         int* array;
 4         int size;
 5         int FIND(int) const;
 6     public:
 7         Gentree(int);
 8         ~Gentree(){ delete [] array; }
 9         void UNION(int,int);
10         bool differ(int,int);
11 };
12 
13 Gentree::Gentree(int sz){
14     size=sz;
15     array=new int[sz];
16     for(int i=0;i<sz;i++)
17         array[i]=ROOT;
18 }
19 
20 bool Gentree::differ(int a,int b){
21     int root1=FIND(a);
22     int root2=FIND(b);
23     return root1!=root2;
24 }
25 
26 void Gentree::UNION(int a,int b){
27     int root1=FIND(a);
28     int root2=FIND(b);
29     if(root1!=root2)
30         array[root2]=root1;
31 }
32 
33 int Gentree::FIND(int curr) const{
34     while(array[curr]!=ROOT)
35         curr=array[curr];
36     return curr;
37 }

父节点下标值          0     0     1     1     1     2          7     7     7

节点值     R     A     B     C     D     E     F     W     X     Y     Z

节点下标值     0     1     2     3     4     5     6     7     8     9     10

3.2 树的实现

3.2.1 子节点表示法

子节点表示法在数组中存储树的节点,每个节点包括节点值、一个父指针以及一个指向子节点链表的指针,链表中子节点的顺序由左至右。每个链表项均包含指向一个子节点的指针。

3.2.2 左子节点/右兄弟节点表示法

每个节点存储节点的值,以及指向父节点、最左子节点和右侧兄弟节点的指针。

3.2.3 动态节点表示法

每个节点存储一条子节点指针链表。

3.2.4 动态左子节点/右兄弟节点表示法

每个节点存储其左子节点和右侧兄弟节点的指针。

posted @ 2024-03-01 15:13  kitsum  阅读(2)  评论(0编辑  收藏  举报