您的位置:首页 > 其它

二叉查找树的简单实现

2014-01-16 23:31 183 查看
虽然代码写了,部分还是参考教材,有的还不是很理解:

#include <iostream>
#include <malloc.h>

struct TreeNode{
TreeNode(int aVal){
value = aVal;
pLeft = NULL;
pRight = NULL;
}
int value;
TreeNode* pLeft;
TreeNode* pRight;
};

TreeNode* CreateTree(){
TreeNode* pNode = new TreeNode(0);

return pNode;
}

TreeNode* Insert(int val, TreeNode* pTree){
if (NULL == pTree){
pTree = CreateTree();
if (NULL == pTree){
return NULL;
}
pTree->value = val;

return pTree;
}

if (pTree->value > val){
pTree->pLeft = Insert(val, pTree->pLeft);
}
else if (pTree->value < val){
pTree->pRight = Insert(val, pTree->pRight);
}

return pTree;
}

void PrintTree(TreeNode* pTree){
if (!pTree){
return;
}

printf("%d ", pTree->value);
PrintTree(pTree->pLeft);
PrintTree(pTree->pRight);
}

void Destory(TreeNode* pTree){
if (NULL == pTree){
return;
}

Destory(pTree->pLeft);
Destory(pTree->pRight);

delete pTree;
}

TreeNode* Find(int val, TreeNode* pTree){
if (NULL == pTree){
printf("can't find the node:%d\n", val);
return NULL;
}

if (pTree->value == val){
return pTree;
}

if (pTree->value > val){
Find(val, pTree->pLeft);
}
else{
Find(val, pTree->pRight);
}
}

TreeNode* FindMin(TreeNode* pTree){
if (NULL == pTree){
return NULL;
}

TreeNode* pRes = pTree;
while (pRes->pLeft){
pRes = pRes->pLeft;
}

return pRes;
}

void SwapVal(int& val1, int& val2){
int tmp = val1;
val1 = val2;
val2 = val1;
}
TreeNode* DeleteNode(int val, TreeNode* pTree){
TreeNode* tmpCell = NULL;

if (NULL == pTree){
return NULL;
}

if (val < pTree->value){
pTree->pLeft = DeleteNode(val, pTree->pLeft);
}
else if (val > pTree->value){
pTree->pRight = DeleteNode(val, pTree->pRight);
}
else if (pTree->pLeft && pTree->pRight){
tmpCell = FindMin(pTree->pRight);
pTree->value = tmpCell->value;
pTree->pRight = DeleteNode(pTree->value, pTree->pRight);
}
else{
tmpCell = pTree;
if (pTree->pLeft){
pTree = pTree->pLeft;
}
else if (pTree->pRight){
pTree = pTree->pRight;
}

delete tmpCell;
}
return pTree;
}
int main(){
TreeNode* pTree = NULL;
for (int i = 0; i < 10; ++i){
pTree = Insert(i, pTree);
}
PrintTree(pTree);
printf("\n");

TreeNode* pNode = Find(100, pTree);
if (pNode){
printf("find node:%d\n", pNode->value);
}

pTree = DeleteNode(5, pTree);

pTree = DeleteNode(1, pTree);

PrintTree(pTree);
printf("\n");

Destory(pTree);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: