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

先查找根节点元素值是不是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

原文地址:https://www.cnblogs.com/wanmeishenghuo/p/9693424.html