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

998元网站建设优化企业网站建设的定位

998元网站建设优化,企业网站建设的定位,163网易企业邮箱格式,公司产品推广方案二叉搜索树 满足条件: 1.对于根节点:左子树中所有节点的值小于右子树中所有节点的值 2.任意节点的左右子树也是二叉搜索树,同样满足条件1 二叉搜索树的常用操作 我们将二叉搜索树封装为一个类 BinarySearchTree ,并声明一个成员变…

二叉搜索树

满足条件:

1.对于根节点:左子树中所有节点的值小于右子树中所有节点的值

2.任意节点的左右子树也是二叉搜索树,同样满足条件1

二叉搜索树的常用操作

我们将二叉搜索树封装为一个类 BinarySearchTree ,并声明一个成员变量 root ,指向树的根节点

查找节点

给定目标值target,我们可以根据二叉搜索树的性质来查找,声明一个节点cur从根节点开始遍历

  • cur.val<target说明targetcur的右子树,执行cur=cur.right
  • cur.val>target说明targetcur的左子树,执行cur=cur.left
  • cur.val=target,返回该节点,跳出循环
/* 查找节点 */
TreeNode *search(int num) {TreeNode *cur = root;// 循环查找,越过叶节点后跳出while (cur != nullptr) {// 目标节点在 cur 的右子树中if (cur->val < num)cur = cur->right;// 目标节点在 cur 的左子树中else if (cur->val > num)cur = cur->left;// 找到目标节点,跳出循环elsebreak;}// 返回目标节点return cur;
}

插入节点

  • 查找插入位置:从根节点出发,根据当前节点值和 num 的大小关系循环向下搜索,直到越过叶节点(遍历至 None )时跳出循环

  • 在该位置插入节点:初始化节点 num ,将该节点置于 None 的位置。

注意:

二叉搜索树中不允许有重复的元素,否则就违反了二叉搜索树的定义,若待插入的节点在二叉搜索树中,则不执行任何操作,直接返回

为了实现插入节点,我们需要借助节点 pre 保存上一轮循环的节点。这样在遍历至 None 时,我们可以获取到其父节点,从而完成节点插入操作

/* 插入节点 */
void insert(int num) {// 若树为空,则初始化根节点if (root == nullptr) {root = new TreeNode(num);return;}TreeNode *cur = root, *pre = nullptr;// 循环查找,越过叶节点后跳出while (cur != nullptr) {// 找到重复节点,直接返回if (cur->val == num)return;pre = cur;// 插入位置在 cur 的右子树中if (cur->val < num)cur = cur->right;// 插入位置在 cur 的左子树中elsecur = cur->left;}// 插入节点TreeNode *node = new TreeNode(num);if (pre->val < num)pre->right = node;elsepre->left = node;
}

删除节点

二叉搜索树的删除分为三种情况

  • 当待删除节点的度为0时,可以直接删除这个节点。
  • 当待删除节点的度为1时,我们将子节点替换待删除的节点即可
  • 当待删除节点的度为2时,我们无法删除这个节点,而是需要一个节点替换这个节点,因为要维持搜索二叉树的性质,所以这个待删除节点的值可以是右子树的最小节点或者左子树的最大节点
/* 删除节点 */
void remove(int num) {// 若树为空,直接提前返回if (root == nullptr)return;TreeNode *cur = root, *pre = nullptr;// 循环查找,越过叶节点后跳出while (cur != nullptr) {// 找到待删除节点,跳出循环if (cur->val == num)break;pre = cur;// 待删除节点在 cur 的右子树中if (cur->val < num)cur = cur->right;// 待删除节点在 cur 的左子树中elsecur = cur->left;}// 若无待删除节点,则直接返回if (cur == nullptr)return;// 子节点数量 = 0 or 1if (cur->left == nullptr || cur->right == nullptr) {// 当子节点数量 = 0 / 1 时, child = nullptr / 该子节点TreeNode *child = cur->left != nullptr ? cur->left : cur->right;// 删除节点 curif (cur != root) {if (pre->left == cur)pre->left = child;elsepre->right = child;} else {// 若删除节点为根节点,则重新指定根节点root = child;}// 释放内存delete cur;}// 子节点数量 = 2else {// 获取中序遍历中 cur 的下一个节点TreeNode *tmp = cur->right;while (tmp->left != nullptr) {tmp = tmp->left;}int tmpVal = tmp->val;// 递归删除节点 tmpremove(tmp->val);// 用 tmp 覆盖 curcur->val = tmpVal;}
}
http://www.yayakq.cn/news/182626/

相关文章:

  • 专门做衬衣网站北京企业响应式网站建设
  • 电子商务网站建立wordpress添加边框
  • 企业注册好了怎么做网站后台做网站的题
  • 什么网站是做家教的海洋网络网站建设
  • 网课系统软件网站建设费用什么是网络设计图
  • 上海外贸公司电话自己给自己网站做seo
  • 网站设计 书籍网站建设放什么科目
  • 宜昌网站设计如何制作公司app
  • 程序_做彩票源码网站开发西宁网页设计
  • 找个做网站的建网站能赚钱吗
  • 邯郸网站设计在哪里购物网站运作
  • 网站3网合一是怎么做的网站建设参考文献
  • 深圳做网站服务商上海抖音代运营公司
  • 杭州的网站建设公司网建公司转型
  • 手机网站建设咨询友情链接什么意思
  • 建网站权威公司移动端网站怎么制作
  • 郑州网站微信微博维护物流网站设计与实现
  • 网站开发的实训内容网站开发背景图模板
  • 德尔普的网站建设的价格软件开发工程师需要考什么证书
  • 阿里云网站目录韶关哪里做网站最好
  • 企业网站建设一般要素包含哪些企业网站备案案例
  • h5网站开发哪个好响应式建网站
  • 山西建设机械网站首页上海做展会的网站都有哪些
  • 重庆网站首页制作wordpress调用分类描述
  • 如何在分类信息网站做推广昆山网站开发ikelv
  • 定制公司网站建设仓山网站建设
  • 湖北医院网站建设企业设计网站建设
  • 沈阳做网站有名公司网站开发和运维区别
  • 奇艺广州网站建设熊掌号公司简介模板免费下载完整版免费
  • 手机黄山网站网站设计 中国风