二叉搜索树之递归
来源:互联网 发布:开淘宝零食店流程 编辑:程序博客网 时间:2024/06/05 08:55
上一篇写的是关于二叉搜索树的递归方法,这次就写一下非递归的方法吧。
首先是插入,递归的插入就非常简单了,先插入根节点,再判断是要插入左子树,还是右子树。
直接上代码吧。
bool Insert_Nor(const K& key, const V& value) { return _Insert(_pRoot, key, value); }
因为要递归遍历,不能每次都往_pRoot根节点上插,所以需要重新写一个函数,将_pRoot作为参数传过去。
bool _Insert(Node* & pRoot, const K& key, const V& value) { if(pRoot == NULL) { pRoot = new Node(key, value); return true; } if(pRoot->_key > key) _Insert(pRoot->_pLeft, key, value); else _Insert(pRoot->_pRight, key, value); return false; }
递归查找:
Node* Find_Nor(const K& key) { return _Find(_pRoot, key); }
Node* _Find(Node* pRoot, const K& key) { Node* pCur = pRoot; if(pRoot) { if(pRoot->_key > key) return _Find(pRoot->_pLeft, key); else if(pRoot->_key < key) return _Find(pRoot->_pRight, key); else return pRoot; } return NULL; }
找到了就返回该节点,没找到就返回NULL。
递归删除:
代码:
bool Remove_Nor(const K& key) { return _Remove(_pRoot, key); }
bool _Remove(Node*& pRoot, const K& key) { if(pRoot == NULL) return false; if(pRoot->_key > key) return _Remove(pRoot->_pLeft, key); else if(pRoot->_key < key) return _Remove(pRoot->_pRight, key); else { Node* pDel = pRoot; //左孩子为空 if(pRoot->_pLeft == NULL) { pRoot = pRoot->_pRight; delete pDel; pDel = NULL; return true; } //右孩子为空,左孩子不为空 else if(pRoot->_pRight == NULL) { pRoot = pRoot->_pRight; delete pDel; pDel = NULL; return true; } //左右孩子都不为空 else { //先找到右子树的最左结点 Node* MinNodeInRightTree = pRoot->_pRight; while(MinNodeInRightTree->_pLeft) MinNodeInRightTree = MinNodeInRightTree->_pLeft; //将最左结点与当前节点值交换 pDel->_key = MinNodeInRightTree->_key; pDel->_value = MinNodeInRightTree->_value; return _Remove(pRoot->_pRight, MinNodeInRightTree->_key); } } return false; }
阅读全文
0 0
- 二叉搜索树之递归
- 二叉搜索树之非递归
- 二叉树搜索 递归
- 数据结构之搜索二叉树递归&非递归
- 二叉搜索树-非递归
- 递归建立二叉搜索树
- 二叉搜索树(递归)
- 二叉搜索树的非递归遍历之先序
- 二叉搜索树---递归及非递归
- 【递归】 之 二叉树
- 递归实现二叉搜索树建立
- 二叉搜索树(非递归)
- 非递归实现搜索二叉树
- 数据结构(一)二叉搜索树-递归实现
- 二叉搜索树的非递归实现
- 二叉搜索树 (java递归版)
- 二叉搜索树 (c++递归版)
- 二叉搜索树 (c++非递归版)
- ubuntu samba服务器配置
- Vue.js音乐
- Lua 长度操作符
- centos下elk5.4.0部署
- 离散题目8
- 二叉搜索树之递归
- 数组的概念
- 友盟分享出去图片颜色变化
- team链路聚合,网桥的配置,IPV6
- org.apache.hadoop.security.AccessControlException: Permission denied: user=root, access=WRITE, inode
- Jquery详解1--定义差别基础1
- STL相关知识点
- windows窗口消息
- 用sqoop将oracle数据导入Hbase 使用笔记