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