• 第六十二课 二叉树中的结点查找操作


    先查找根节点元素值是不是9,不是的话就查找两个子树,这就是递归的过程。

    返回第一个找到的结点。

     

    添加查找函数:

      1 #ifndef BTREE_H
      2 #define BTREE_H
      3 
      4 #include "Tree.h"
      5 #include "BTreeNode.h"
      6 #include "Exception.h"
      7 #include "LinkQueue.h"
      8 
      9 namespace DTLib
     10 {
     11 
     12 template < typename T >
     13 class BTree : public Tree<T>
     14 {
     15 protected:
     16     //定义递归功能函数
     17     virtual BTreeNode<T>* find(BTreeNode<T>* node, const T& value) const
     18     {
     19         BTreeNode<T>* ret = NULL;
     20 
     21         if( node != NULL )
     22         {
     23             if( node->value == value )
     24             {
     25                 ret = node;
     26             }
     27             else
     28             {
     29                 if( ret == NULL )
     30                 {
     31                     ret = find(node->left, value);
     32                 }
     33 
     34                 if( ret == NULL )
     35                 {
     36                     ret = find(node->right, value);
     37                 }
     38             }
     39         }
     40 
     41         return ret;
     42     }
     43 
     44     virtual BTreeNode<T>* find(BTreeNode<T>* node, BTreeNode<T>* obj) const
     45     {
     46         BTreeNode<T>* ret = NULL;
     47 
     48         if( node == obj )
     49         {
     50             ret = node;
     51         }
     52         else
     53         {
     54             if( node != NULL )
     55             {
     56                 if( ret == NULL )
     57                 {
     58                     ret = find(node->left, obj);
     59                 }
     60 
     61                 if( ret == NULL )
     62                 {
     63                     ret = find(node->right, obj);
     64                 }
     65             }
     66         }
     67 
     68         return ret;
     69     }
     70 public:
     71     bool insert(TreeNode<T>* node)
     72     {
     73         bool ret = true;
     74 
     75         return ret;
     76     }
     77 
     78     bool insert(const T& value, TreeNode<T>* parent)
     79     {
     80         bool ret = true;
     81 
     82         return ret;
     83     }
     84 
     85     SharedPointer< Tree<T> > remove(const T& value) //删除的节点的子节点我们还需要处理,因此要返回删除节点的指针,//这样有机会对里面的元素做进一步操作
     86     {
     87         return NULL;
     88     }
     89 
     90     SharedPointer< Tree<T> > remove(TreeNode<T>* node)
     91     {
     92         return NULL;
     93     }
     94 
     95     BTreeNode<T>* find(const T& value) const
     96     {
     97         return find(root(), value);
     98     }
     99 
    100     BTreeNode<T>* find(TreeNode<T>* node) const
    101     {
    102         return find(root(), dynamic_cast<BTreeNode<T>*>(node));
    103     }
    104 
    105     BTreeNode<T>* root() const
    106     {
    107         return dynamic_cast<BTreeNode<T>*>(this->m_root);
    108     }
    109 
    110     int degree() const
    111     {
    112         return 0;
    113     }
    114 
    115     int count() const
    116     {
    117         return 0;
    118     }
    119 
    120     int height() const
    121     {
    122         return 0;
    123     }
    124 
    125     void clear()
    126     {
    127         this->m_root = NULL;
    128     }
    129 
    130     ~BTree()
    131     {
    132         clear();
    133     }
    134 };
    135 
    136 }
    137 
    138 #endif // BTREE_H

  • 相关阅读:
    [概率论]2017.5.9
    [概率论] 2017 5.2
    [离散数学II]2017.5.2
    [离散数学II]2017.4.25
    [概率论]2017.4.19
    [概率论] 2017.4.18
    [离散数学II]2017.4.18
    [离散数学II]2017.4.11
    [概率论]2017.4.12
    [概率论]2017.4.5
  • 原文地址:https://www.cnblogs.com/wanmeishenghuo/p/9693424.html
Copyright © 2020-2023  润新知