第五十二课 树的存储结构与实现

GTree是通用树结构。

每个节点都包含了指向父节点的指针。

添加GTreeNode.h文件:

 1 #ifndef GTREENODE_H
 2 #define GTREENODE_H
 3 
 4 #include "TreeNode.h"
 5 #include "LinkList.h"
 6 
 7 namespace DTLib
 8 {
 9 
10 template < typename T >
11 class GTreeNode : public TreeNode<T>
12 {
13 public:
14     LinkList<GTreeNode<T>*> child;
15 
16 };
17 
18 }
19 
20 #endif // GTREENODE_H

添加GTree.h文件:

 1 #ifndef GTREE_H
 2 #define GTREE_H
 3 
 4 #include "Tree.h"
 5 #include "GTreeNode.h"
 6 
 7 namespace DTLib
 8 {
 9 
10 template < typename T >
11 class GTree : public Tree<T>
12 {
13 public:
14     bool insert(TreeNode<T>* node)
15     {
16         bool ret = true;
17 
18         return ret;
19     }
20 
21     bool insert(const T& value, TreeNode<T>* parent)
22     {
23         bool ret = true;
24 
25         return ret;
26     }
27 
28     //删除的节点的子节点我们还需要处理,因此要返回删除节点的指针,这样有机会对里面的元素做进一步操作
29     SharedPointer< Tree<T> > remove(const T& value)
30     {
31         return NULL;
32     }
33 
34     SharedPointer< Tree<T> > remove(TreeNode<T>* node)
35     {
36         return NULL;
37     }
38 
39     GTreeNode<T>* find(const T& value) const  // 返回GTreeNode,赋值兼容性
40     {
41         return NULL;
42     }
43 
44     GTreeNode<T>* find(TreeNode<T>* node) const
45     {
46         return NULL;
47     }
48 
49     GTreeNode<T>* root() const
50     {
51         return dynamic_cast<GTreeNode<T>*>(this->m_root);
52     }
53 
54     int degree() const
55     {
56         return 0;
57     }
58     int count() const
59     {
60         return 0;
61     }
62 
63     int height() const
64     {
65         return 0;
66     }
67 
68     void clear()
69     {
70         this->m_root = NULL;
71     }
72 
73     ~GTree()
74     {
75         clear();
76     }
77 };
78 
79 }
80 
81 #endif // GTREE_H

从上往下看是非线性的,从下往上看是线性的,也就是类似于链表结构,加入父节点指针后,我们就可以用一些链表的知识来处理树了。

在工程中这种方式使用很广泛。

猜你喜欢

转载自www.cnblogs.com/wanmeishenghuo/p/9690773.html