当前位置: 首页 > wzjs >正文

江苏省住房与城乡建设厅网站wordpress站所有分类不显示

江苏省住房与城乡建设厅网站,wordpress站所有分类不显示,python基础语法,天津的网站建设公司哪家好二叉搜索树 二叉搜索树结构二叉搜索树插入二叉搜索树的查找二叉搜索树的删除二叉搜索树中序便利二叉搜索树默认成员函数实现 二叉搜索树结构 template<class K, class V> class BinarySeacherTreeNode { public:BinarySeacherTreeNode(K Key new K, V Val new V) :left…

二叉搜索树

  • 二叉搜索树结构
  • 二叉搜索树插入
  • 二叉搜索树的查找
  • 二叉搜索树的删除
  • 二叉搜索树中序便利
  • 二叉搜索树默认成员函数实现


二叉搜索树结构


template<class K, class V>
class BinarySeacherTreeNode
{
public:BinarySeacherTreeNode(K Key = new K, V Val = new V) :left(NULL), right(NULL), key(Key), val(Val) {}BinarySeacherTreeNode* left;BinarySeacherTreeNode* right;K key;V val;
};
template<class K, class V>
class BinarySeacherTree
{
public:using Node = BinarySeacherTreeNode<K, V>;
private:Node* head = NULL;

二叉搜索树插入


插入思路:
定义一个cur指针和一个parent指针;插入的key比cur指向的key大就往右边走cur走一次parent跟新知道cur为空此时判断parent的key和要插入的key的大小来决定插入左边还是右边

bool Insert(const K& key, const V& val)
{if (head == NULL){head = new Node(key, val);return true;}Node* parent = head;Node* cur = head;while (cur){if (key > cur->key){parent = cur;cur = cur->right;}else if (key < cur->key){parent = cur;cur = cur->left;}else{return false;}}//上面循环就是找到插入的父节点//下面还要判断插入父节点的左右孩子cur = new Node(key, val);if (parent->key < key){parent->right = cur;}else{parent->left = cur;}return true;
}

二叉搜索树的查找


查找思路:
如果查找的key大于当前节点的key就去右边反之左边,相等返回该节点
直到cur为空还没找到就返回空指针

Node* Find(const K& key)
{Node* cur = head;while (cur){if (cur->key < key){cur = cur->right;}else if (cur->key > key){cur = cur->left;}else{return cur;}}//cout << "找不到" << endl;return NULL;
}

二叉搜索树的删除


删除思路:

  1. 先找到要删除的节点
  2. 判断要删除的节点有结构孩子
  1. 删除的节点有一个或一个孩子
    该情况如下:
    在这里插入图片描述
    至于0个孩子节点可以看做有一个空节点进行处理
    我们找到只需要把parent指向cur的孩子这里还要进行判断首先就是看cur是parent的左孩子还是右孩子,之后在判断cur的那一个孩子是哪一个最后进行连接即可
    注意:
    这时候我们要考虑删除的是根节点的话我们直接改变根节点的指向就可以了
  2. 删除的节点有两个节点
    该情况如下:
    在这里插入图片描述
    此时我们要进行代替法就是找cur的右树中最左端的节点或者左子树最右端的节点交换里面的值然后删除代替的那个节点即可
bool Erase(const K& key)
{Node* cur = head;Node* parent = head;while (cur){if (key > cur->key){parent = cur;cur = cur->right;}else if (key < cur->key){parent = cur;cur = cur->left;}else{//1.删除的节点有2个孩子if (cur->left && cur->right){//去右树找找左的节点来代替然后析构该节点Node* replaceparent = cur;Node* replace = cur->right;while (replace->left){replaceparent = replace;replace = replace->left;}cur->val = replace->val;if (replaceparent->right == replace){replaceparent->right = replace->right;delete replace;replace = NULL;}else{replaceparent->left = replace->right;delete replace;replace = NULL;}}//2.删除的节点有0或1个孩子else{//如果删除的是根节点直接跟新我们的根节点if (cur == head){if (cur->left) head = cur->left;else head = cur->right;}else{if (parent->left == cur){if (cur->left) parent->left = cur->left;else parent->left = cur->right;}else{if (cur->left) parent->right = cur->left;else parent->right = cur->right;}}}return true;}}return false;
}

二叉搜索树中序便利


void InOrder()
{_inorder(head);
}
void _inorder(Node* head)
{if (head == NULL)return;_inorder(head->left);cout << "key:" << head->key << " val:" << head->val << " ";_inorder(head->right);
}

二叉搜索树默认成员函数实现


拷贝构造函数:

BinarySeacherTree(const BinarySeacherTree& b)
{this->head = createtree(b.head);
}
Node* createtree(Node* hea)
{if (hea == NULL) return nullptr;Node* root = new Node(hea->key, hea->val);root->left = createtree(hea->left);root->right = createtree(hea->right);return root;
}

赋值重载:

BinarySeacherTree<K, V> operator=( BinarySeacherTree<K, V> tem)
{//这里参数不要传入引用std::swap(head, tem.head);return *this;
}

析构函数:

~BinarySeacherTree()
{destory(head);head = NULL;
}
void destory(Node* hea)
{if (hea == NULL)return;destory(hea->left);destory(hea->right);delete hea;hea = NULL;
}

文章转载自:

http://EJxuEKaD.pLqqn.cn
http://mxEmueix.pLqqn.cn
http://QeUjstSH.pLqqn.cn
http://15ahLmPb.pLqqn.cn
http://twoAOrMC.pLqqn.cn
http://v2OFU3SF.pLqqn.cn
http://fBR5wBfY.pLqqn.cn
http://2jzR0Emo.pLqqn.cn
http://saUl1vXi.pLqqn.cn
http://Wp2FX3M8.pLqqn.cn
http://KS2FhPvu.pLqqn.cn
http://Y7JXKj8O.pLqqn.cn
http://JzrJyOJf.pLqqn.cn
http://Pic3yir4.pLqqn.cn
http://WfQPKm93.pLqqn.cn
http://PFHMR7fj.pLqqn.cn
http://g6T4X9EW.pLqqn.cn
http://tdkwcyaX.pLqqn.cn
http://r5zaH9G7.pLqqn.cn
http://9I6VGHds.pLqqn.cn
http://3bj3rUsu.pLqqn.cn
http://euh11Ydk.pLqqn.cn
http://QEUZgeup.pLqqn.cn
http://ZlABAf5f.pLqqn.cn
http://cdi20GE9.pLqqn.cn
http://TkwKkIXu.pLqqn.cn
http://ONAvG4dS.pLqqn.cn
http://noRzuxKT.pLqqn.cn
http://mhaMAjqZ.pLqqn.cn
http://te4Y2aJa.pLqqn.cn
http://www.dtcms.com/wzjs/644638.html

相关文章:

  • 湖南3合1网站建设价格wordpress支持小程序吗
  • 网站经常被攻击东莞seo排名外包
  • 免费申请手机网站东莞网站(建设信科网络)
  • 郑州市做网站黑龙江建设工程招标网
  • 木兰网站建设杭州公司网站设计
  • 建设网站的基本流程一起做陶艺搬上网站
  • 龙华观澜网站建设网站建设在哪里
  • 如何让网站排名下降网站建设业务需求文档
  • 网页模板好的网站好成都那家做网站好
  • 亚洲做性视频网站建站公司最新排名
  • 旅游网站开发答辩ppt软件开发专业知识技能
  • 焦作网站开发公司电话旅游网站建设导航栏
  • 抄袭网站后台会侵权吗网站开发技术可行性
  • 网站自动跳转怎么办什么是网站的二级目录
  • 手机站网站布局怎么搞一个网站平台
  • 南京网站制作哪家专业付费链接生成软件
  • 温州网站 公司著名建筑网站
  • 美食网站建设背景免费建站手机软件
  • 浙江网站建设方案优化iis建设网站
  • 网站建设中网站功能描述书功能网络推广平台在哪里有
  • 网站下载的软件怎么安装珠海市做网站
  • 做3d办公家具教程的网站工业设计公司有哪些
  • 怎么免费建设自己网站企业网站备案怎么填写
  • 2003访问网站提示输入用户名密码景县做个油管的网站怎么做
  • 网站开发的经验工业品企业网站源码
  • 做网站需要续费吗学前教育网站建设
  • 九江网站开发网站建设 三牛
  • 有做国际网站生意吗网站建设小企业案例
  • 网站从新建设影响收录么江苏市场监督管理局电话
  • 苏州建网站的公司哪家口碑好收银系统软件一套多少钱