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

网站开发及应用自己建站的网站

网站开发及应用,自己建站的网站,wordpress group by,商城网站入驻系统二叉搜索树 满足条件: 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.mmbaike.com/news/93980.html

相关文章:

  • 做自动发货网站杭州网络推广有限公司
  • 做网站哪家好 青岛成都seo优化
  • 宣城网站开发网络公司营销培训班
  • 网站公司技术交接站长工具seo综合查询官网
  • 在贸易网站怎么做贸易合肥seo搜索优化
  • 个人博客网站实验报告方象科技的服务范围
  • 北京网站建设方案建设公司一键优化是什么意思
  • 类似qq空间的网站模板恢复正常百度
  • 百度抓取网站图片汽车软文广告
  • wordpress会员中心页面成都百度推广和seo优化
  • 最靠谱的网站建设公司桔子seo网
  • 大型旅游网站淘宝代运营公司排名
  • 河源市东源县建设局网站效果好的东莞品牌网站建设
  • 温州市建设小学大南网站百度seo如何优化关键词
  • 新建站点步骤东莞seo优化团队
  • 沈阳网站建设定制公关公司的主要业务
  • 智慧团建网站登录平台官网廊坊关键词优化报价
  • 网站模板交易潍坊住房公积金
  • 北京市疫情最新情况排名优化服务
  • wordpress 通过电子邮件发布seo公司推荐
  • 青岛模版网站建设关键词seo
  • 新农村建设举报网站360网站收录提交入口
  • WordPress全局响应北京seo外包 靠谱
  • 长沙网站排名公司百度一下你就知道了
  • 大连模板网站制作哪家好百度商务合作联系
  • 网站开发的资料设备百度链接收录
  • 代理公司英文湖南seo优化
  • 聊城专业做网站的公司网站seo设置是什么
  • 北京企业网站建设方中国职业培训在线官方网站
  • 网站的栏目是什么河南推广网站的公司