- 查找操作的方式
— 基于数据元素值的查找:BTreeNode<T>* find(const T& value) const
— 基于结点的查找:BTreeNode<T>* find(TreeNode<T>* node) const
- 基于数据元素值的查找
— 定义功能:find(node, value)
在 node 为根结点的二叉树中查找 value 所在的结点
- 基于结点的查找
定义功能:find(node, obj)
在 node 为根结点的二叉树中查找是否存在 obj 结点
BTreeNode.h
#ifndef BTREENODE_H
#define BTREENODE_H
#include "TreeNode.h"
namespace XiebsLib
{
template <typename T>
class BTreeNode : public TreeNode<T>
{
protected:
public:
BTreeNode<T>* left;
BTreeNode<T>* right;
BTreeNode()
{
left = nullptr;
right = nullptr;
}
static BTreeNode<T>* NewNode()
{
BTreeNode<T>* ret = new BTreeNode<T>;
if(ret != nullptr)
{
ret->m_flag = true;
}
return ret;
}
};
}
#endif // BTREENODE_H
BTree.h
#ifndef BTREE_H
#define BTREE_H
#include "Tree.h"
#include "BTreeNode.h"
#include "Exception.h"
#include "LinkQueue.h"
namespace XiebsLib
{
template <typename T>
class BTree : public Tree<T>
{
protected:
virtual BTreeNode<T>* find(BTreeNode<T>* node,const T& value)const
{
BTreeNode<T>* ret = nullptr;
if(node != nullptr)
{
if(node->value == value)
{
ret = node;
}
else
{
if(ret == nullptr)
{
ret = find(node->left, value);
}
if(ret == nullptr)
{
ret = find(node->right, value);
}
}
}
return ret;
}
virtual BTreeNode<T>* find(BTreeNode<T>* node, BTreeNode<T>* obj)const
{
BTreeNode<T>* ret = nullptr;
if(node != nullptr)
{
if(node == obj)
{
ret = node;
}
else
{
if(ret == nullptr)
{
ret = find(node->left, obj);
}
if(ret == nullptr)
{
ret = find(node->right, obj);
}
}
}
return ret;
}
public:
bool insert(TreeNode<T>* node)
{
bool ret;
return ret;
}
bool insert(const T& value, TreeNode<T>* parent)
{
bool ret;
return ret;
}
SharedPointer< Tree<T> > remove(const T& value)
{
return nullptr;
}
SharedPointer< Tree<T> > remove(TreeNode<T>* node)
{
return nullptr;
}
BTreeNode<T>* find(const T& value)const
{
return find(root(), value);
}
BTreeNode<T>* find(TreeNode<T>* node)const
{
return find(root(), dynamic_cast<BTreeNode<T>*>(node));
}
BTreeNode<T>* root()const
{
return dynamic_cast<BTreeNode<T>*>(this->m_root);
}
int degree()const
{
return 0;
}
int count()const
{
return 0;
}
int height()const
{
return 0;
}
void clear()
{
}
~BTree()
{
clear();
}
};
}
#endif // BTREE_H