第五十一课 树的定义与操作

第五十一课 树的定义与操作

树的定义是递归的,与树的相关算法也是递归的。

第五十一课 树的定义与操作

 

 

第五十一课 树的定义与操作

 

第五十一课 树的定义与操作

 

 第五十一课 树的定义与操作

 

 第五十一课 树的定义与操作

 

第五十一课 树的定义与操作

 

第五十一课 树的定义与操作

 

 第五十一课 树的定义与操作

如果我们定义一个数组,这个数组中的每一个元素是一棵树,那么这个数组就构成了一个森林。

 

第五十一课 树的定义与操作

 

 

第五十一课 树的定义与操作

 

第五十一课 树的定义与操作

树节点里面有指向父节点的指针,对于工程实践来说非常有帮助。

 

 第五十一课 树的定义与操作

 

添加TreeNode.h文件:

 1 #ifndef TREENODE_H
 2 #define TREENODE_H
 3 
 4 #include "Object.h"
 5 
 6 namespace DTLib
 7 {
 8 
 9 template < typename T >
10 class TreeNode : public Object
11 {
12 public:
13     T value;
14     TreeNode<T>* parent;
15 
16     TreeNode()
17     {
18         parent = NULL;
19     }
20 
21     virtual ~TreeNode() = 0;
22 };
23 
24 template < typename T >
25 TreeNode<T>::~TreeNode()   //提供一个空的实现,否则可能编译不过
26 {
27 
28 }
29 
30 }
31 
32 #endif // TREENODE_H

 

添加Tree.h文件:

 1 #ifndef TREE_H
 2 #define TREE_H
 3 
 4 #include "TreeNode.h"
 5 #include "SharedPointer.h"
 6 
 7 namespace DTLib
 8 {
 9 
10 template < typename T >
11 class Tree : public Object
12 {
13 protected:
14     TreeNode<T>* m_root;
15 
16 public:
17     Tree()
18     {
19         m_root = NULL;
20     }
21 
22     virtual bool insert(TreeNode<T>* node) = 0;
23     virtual bool insert(const T& value, TreeNode<T>* parent) = 0;
24     virtual SharedPointer< Tree<T> > remove(const T& value) = 0; //删除的节点的子节点我们还需要处理,因此要返回删除节点的指针,
25                                                                 //这样有机会对里面的元素做进一步操作
26     virtual SharedPointer< Tree<T> > remove(TreeNode<T>* node) = 0;
27     virtual TreeNode<T>* find(const T& value) const = 0;
28     virtual TreeNode<T>* find(TreeNode<T>* node) const = 0;
29     virtual TreeNode<T>* root() const = 0;
30     virtual int degree() const = 0;
31     virtual int count() const = 0;
32     virtual int height() const = 0;
33     virtual void clear() = 0;
34 
35 };
36 
37 }
38 
39 #endif // TREE_H

 

 

小结:

第五十一课 树的定义与操作