二叉查找树的简单实现
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);
}
#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);
}
相关文章推荐
- java 数据结构 二叉查找树的简单实现
- 二叉查找树简单实现
- 二叉查找树的简单C++实现
- 二叉查找树的简单实现
- 一颗二叉查找树的简单实现
- 二叉查找树的简单实现
- 二叉查找树的插入和删除简单实现
- 简单数据结构实现——二叉查找树
- 二叉查找树简单实现
- 一个简单的二叉查找树实现
- 二叉查找树的简单实现(C语言版)
- [数据结构]二叉查找树 简单实现
- 二叉查找树(简单C实现)
- 二叉查找树的简单实现
- 二叉查找树的简单模板实现
- 二叉查找树的简单模板实现
- LintCode_二叉查找树中搜索区间_简单的递归实现
- 简单数据结构实现——二叉查找树
- 二叉查找树简单实现
- jQuery+ROW_NUMBER结合Repeater实现简单分页