数据结构笔记-二叉排序树
来源:互联网 发布:mac 串口调试工具 编辑:程序博客网 时间:2024/06/05 15:01
引入思想:既能满足类似折半查找的查找效率,又能保证插入和删除的效率。
概念
二叉排序树(Binary Sort Tree) 或则是一棵空树;或则是具有下列性质的二叉树:
1. 若它的左子树不空,则左子树上的所有结点的值均小于它的根结点的值;
2. 若它的右子树不空,则右子树上的所有结点的值均大于它的根结点的值;
3. 它的左、右子树也分别为二叉排序树;
查询操作
代码如下:
bool CSortTree::Search( const int nData, BiTNode*& pFindNode ){if( NULL == m_pBiTree ){return false;}pFindNode = m_pBiTree;bool bFind = false;while( NULL != pFindNode){if( nData == pFindNode->nData ){bFind = true;break;}else if( (nData < pFindNode->nData) &&(NULL != pFindNode->pLChild) ){pFindNode = pFindNode->pLChild;continue;}else if( (nData > pFindNode->nData) &&(NULL != pFindNode->pRChild) ){pFindNode = pFindNode->pRChild;continue;}else{break;}}return bFind;}
插入操作
代码如下:
bool CSortTree::InSert( const int nData ){BiTNode* pFindNode = NULL;BiTNode* pNewNode = NULL;if( !Search( nData, pFindNode) ){pNewNode = new BiTNode;pNewNode->nData = nData;pNewNode->pLChild = NULL;pNewNode->pRChild = NULL;if( NULL == pFindNode ){m_pBiTree = pNewNode;}else{if( nData < pFindNode->nData ){pFindNode->pLChild = pNewNode;}else{pFindNode->pRChild = pNewNode;}}return true;}return false;}
删除操作
代码如下:
bool CSortTree::Delete( const int nData ){if( NULL == m_pBiTree ){return false;}BiTNode* pParentNode = m_pBiTree;BiTNode* pFindNode = m_pBiTree;bool bFind = false;while( NULL != pFindNode){if( nData == pFindNode->nData ){bFind = true;break;}else if( (nData < pFindNode->nData) && (NULL != pFindNode->pLChild) ){pParentNode = pFindNode;pFindNode = pFindNode->pLChild;continue;}else if( (nData > pFindNode->nData) &&(NULL != pFindNode->pRChild) ){pParentNode = pFindNode;pFindNode = pFindNode->pRChild;continue;}else{break;}}if( bFind ){BiTNode* pTemp = pFindNode;if( NULL == pFindNode->pLChild ){if( pParentNode->pLChild == pFindNode ){pParentNode->pLChild = pFindNode->pRChild;}else if( pParentNode->pRChild == pFindNode){pParentNode->pRChild = pFindNode->pRChild;}else{m_pBiTree = pFindNode->pRChild;}delete pTemp;}else if( NULL == pFindNode->pRChild ){if( pParentNode->pLChild == pFindNode ){pParentNode->pLChild = pFindNode->pLChild;}else if( pParentNode->pRChild == pFindNode){pParentNode->pRChild = pFindNode->pLChild;}else{m_pBiTree = pFindNode->pLChild;}delete pTemp;}else{BiTNode* pTempTwo = pFindNode->pLChild;while( NULL != pTempTwo->pRChild ){pTemp = pTempTwo;pTempTwo = pTempTwo->pRChild;}pFindNode->nData = pTempTwo->nData;if( pTemp != pFindNode ){pTemp->pRChild = pTempTwo->pLChild;}else{pTemp->pLChild = pTempTwo->pLChild;}delete pTempTwo;}return true;}return false;}
很明显第二种情况在查找方面的效率很不理想,这是就引入了平衡二叉树。来保证树的形状比较利于查找和插入删除操作。
- 数据结构笔记-二叉排序树
- 【学习笔记----数据结构24-二叉排序树】
- 数据结构笔记-----二叉排序树和哈希表
- 数据结构笔记-二叉排序树的增删查
- 数据结构学习笔记(12)----平衡二叉排序树
- [数据结构]二叉排序树
- 数据结构 - 二叉排序树
- 数据结构 - 二叉排序树
- 数据结构-二叉排序树
- 数据结构-二叉排序树
- 数据结构 二叉排序树
- 数据结构:二叉排序树
- 数据结构 二叉排序树
- 数据结构-二叉排序树
- 数据结构---二叉排序树
- 数据结构--二叉排序树
- 数据结构---二叉排序树
- 数据结构--二叉排序树
- C陷阱与缺陷笔记
- struts 配置
- 列保存多个数据时一列变多行
- VC 全屏截图 局部截图
- 关于项目中的图片上传、并显示问题
- 数据结构笔记-二叉排序树
- 纯虚函数的默认实现
- 我答知乎:怎么理解“用户的历史行为比他们当前的意愿更有价值”?
- Android 电话拨号
- 学习“内核中的延迟”
- 手机站点meta viewport 设置
- Ubuntu下crontab命令的用法
- 【JSP】赵雅智_jsp语法
- 生物信息学——RNA的剪切过程