数据结构-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 动态左子节点/右兄弟节点表示法
每个节点存储其左子节点和右侧兄弟节点的指针。
-------------------------------------------------------------------------
专注于软件技术和团队管理,致力于为程序员、技术领导者以及对软件开发感兴趣的朋友提供深度的行业见解、实用的管理策略和职业发展的最佳实践。关注个人微信公众号《码上领航者》获取更多深度洞察。