数据结构-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 @   码上领航者  阅读(8)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
点击右上角即可分享
微信分享提示