二叉查找树的插入,删除,遍历和查找等C++实现

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

这里给出了二叉搜索树的创建,以及进行中序遍历、元素插入、删除、查找最大最小值的基本代码:

#include

using namespace std;

template

class BSTNode

{

public:

BSTNode(){lChild = rChild = NULL;}

BSTNode(T &x){element = x; lChild = rChild = NULL;}

//private:

int element;

BSTNode *lChild,*rChild;

};

template

BSTNode* CreateBST(BSTNode *t, T &x) //递归创建二叉查找树

{

BSTNode *b = new BSTNode(x);

if(!t)

return b;

else if(b->element <= t->element)

{

t->lChild = CreateBST(t->lChild, b->element);

}

else

{

t->rChild = CreateBST(t->rChild, b->element);

}

return t;

}

template

void InOrder(BSTNode *t) //中序遍历

{

if(t)

{

InOrder(t->lChild);

cout<< t->element << " ";

InOrder(t->rChild);

}

}

template

BSTNode* Insert(BSTNode *t, BSTNode *b) //插入结点b

{

BSTNode *root = t;

BSTNode *temp = NULL;

while(t)

{

temp = t;

if(b->element <= t->element)

{

t = t->lChild;

}

else

{

t = t->rChild;

}

}

if(!temp)

return b;

else

{

if(b->element <= temp->element)

{temp->lChild = b;

}

else

{

temp->rChild = b;

}

}

return root;

}

template

BSTNode* Search(BSTNode *t, T key) //查询值为key的结点{

while(t && t->element!=key)

{

if(key <= t->element)

{

t = t->lChild;

}

else

{

t = t->rChild;

}

}

return t;

}

template

BSTNode* Minimum(BSTNode *t) //返回最小元素

{

while(t->lChild)

{

t= t->lChild;

}

return t;

}

template

BSTNode* Maximum(BSTNode *t) //返回最大元素

{

while(t->rChild)

{

t = t->rChild;

}

return t;

}

template

BSTNode* findParent(BSTNode *t,BSTNode *node) //寻找node结点的父结点{

BSTNode *parent = NULL;

if(t == node)

{

return NULL;

}

else

{

while(t)

{

if(!t->lChild&& !t->rChild)

{

return NULL;

}

else if(t->lChild == node || t->rChild == node)

{

parent = t;

break;

}

else if(node->element <= t->element)

{

t = t->lChild;

}

else

{

t= t->rChild;

}

}

}

return parent;

}

template

BSTNode* Delete(BSTNode *t, int key) //删除值为key的结点{

BSTNode *z = Search(t,key);

BSTNode *x=NULL,*y= NULL;

if(z->lChild == NULL || z->rChild == NULL)

{

y = z;

}

else

{

y = Minimum(z->rChild);

}

if(y->lChild)

{

x = y->lChild;

}

else

{

x = y->rChild;

}

if(x)

{

BSTNode *parent = findParent(t,y);

if(!parent)

{

return x;

}

else if(parent->lChild == y)

{

parent->lChild = x;

}

else if(parent->rChild == y)

{

parent->rChild =x;

}

}

if(y != z)

相关文档
最新文档