1,查找方式:
1,基于数据元素值的查找:
1,BTreeNode<T>* find(const T& value) const
2,基于结点的查找:
1,BTreeNode<T>* find(TreeNode<T>* node) const
2,树中数据元素和结点的查找:
3,基于数据元素值的查找:
1,定义功能:find(node, value)
1,在 node 为根结点的二叉树中查找 value 所在的结点:
2,功能函数代码实现:
1 /*定义按照值查找的递归功能函数*/ 2 virtual BTreeNode<T>* find(BTreeNode<T>* node, const T& value) const 3 { 4 BTreeNode<T>* ret = NULL; 5 6 if( node != NULL ) // 查找的不是空结点 7 { 8 if( node->value == value ) // 根结点值相等,则找到了 9 { 10 ret = node; 11 } 12 else 13 { 14 if( ret == NULL ) // 根结点没有查到,查左子树 15 { 16 ret = find(node->left, value); 17 } 18 19 if( ret == NULL ) // 左子树没有查到,查右子树 20 { 21 ret = find(node->right, value); 22 } 23 } 24 } 25 26 return ret; 27 }
3,成员函数的代码实现:
1 BTreeNode<T>* find(const T& value) const
2 {
3 return find(root(), value);
4 }
4,基于结点的查找:
1,定义功能:find(node, obj)
1,在 node 为根结点的二叉树中查找是否存在 obj 结点;
2,功能函数代码实现:
1 /*定义按照结点查找的递归功能函数*/ 2 virtual BTreeNode<T>* find(BTreeNode<T>* node, BTreeNode<T>* obj) const 3 { 4 BTreeNode<T>* ret = NULL; 5 6 if( node == obj ) // 如果是根结点 7 { 8 ret = node; // 地址赋值给返回值 9 } 10 else 11 { 12 if( node != NULL ) // 查找结点非空 13 { 14 if( ret == NULL ) // 不是根结点 15 { 16 ret = find(node->left, obj); // 查找左子树 17 } 18 19 if( ret == NULL ) 20 { 21 ret = find(node->right, obj); // 查找右子树 22 } 23 } 24 } 25 26 return ret; 27 }
3,成员函数代码实现:
1 BTreeNode<T>* find(TreeNode<T>* node) const
2 {
3 return find(root(), dynamic_cast<BTreeNode<T>*>(node));
4 }