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


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

     

     

     

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

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

     

    添加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

    小结:

  • 相关阅读:
    How to render client report definition files (.rdlc) directly to the Response stream without preview(转)
    dedecms 5.7后台拿WEBSHELL
    sql注入语句大全
    常用putty命令汇总
    sql学习笔记(要够长)
    Ubuntu自动运行脚本
    backtrack安装优化过程
    原创【bt5非官网版本】 在虚拟机下无法连接网络的解决方案
    第五章——循环结构5.1
    Kali Linux 1.0
  • 原文地址:https://www.cnblogs.com/wanmeishenghuo/p/9688759.html
Copyright © 2020-2023  润新知