二叉查找树的简单实现

来源:互联网 发布:finale 2016 mac 编辑:程序博客网 时间:2024/06/01 07:35

虽然代码写了,部分还是参考教材,有的还不是很理解:

#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);}


0 0
原创粉丝点击