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

玛迪做网站关键词云图

玛迪做网站,关键词云图,信阳网站开发公司电话,商务网站建设需要备案吗必须满足的条件&#xff1a;左子树中所有节点的值< 根节点的值 < 右子树中所有节点的值 任意节点的左右子树也是搜索二叉树&#xff0c;也要满足上面的条件 二叉搜索树与堆不同&#xff0c;不一定是完全二叉树&#xff0c;采用链式结构 搜索二叉树的中序遍历是升序 1、查…

必须满足的条件:左子树中所有节点的值< 根节点的值  < 右子树中所有节点的值

任意节点的左右子树也是搜索二叉树,也要满足上面的条件

二叉搜索树与堆不同,不一定是完全二叉树,采用链式结构

搜索二叉树的中序遍历是升序

 1、查找 

数据大于根 往右走 小于根往左走

TreeNode* search(BinarySearchTree* bst,int num)
{TreeNode* cur = bst->root;while(cur != NULL){if(cur->data < num){    cur = cur -> right; }else{ cur= cur -> left;}else  break; }return cur;
}

2、插入节点

    //1、判断树是否为空 为空创建节点 把数据放入
    //2、树不为空 首先判断 这个要插入的数据是否重复 重复直接返回,cur指向要插入数据的位置 perv指向要插入数据的父亲节点
    //3、找到位置
    //4、将父亲的左/右指向插入的数据节点(看num的值大于prev->data还是小于,大于就是right指向node,小于就是left

void insert(BinarySearchTree* bst, int num)
{//1、判断树是否为空 为空创建节点 把数据放入//2、树不为空 首先判断 这个要插入的数据是否重复 cur指向要插入数据的位置 perv指向要插入数据的父亲节点//3、找到位置//4、将父亲的左/右指向插入的数据节点if(bst -> root = NULL){bst->root = newTreeNode(num);//创建新节点 把数据放进去return;}TreeNode* cur = bst->root, *prev = NULL;while(cur != NULL) //等于NULL不能再进入循环{if(cur->data = num){ return; }prev = cur;if(cur -> data < num){ cur = cur -> right; }else { cur = cur ->left;}}TreeNode* node = newTreeNode(num);if(prev -> data < num){ prev ->right = node;}else { prev -> left = node;}
}

3、删除节点

1、找到要删除的节点 

2、看节点的度   

节点度为0/1:让要被删除的节点的父亲节点指向要被删除的节点的孩子 

节点度为2:找替换节点;找左子树中的最大的或者右子树中的最小的。

查找cur在中序遍历中的下一个节点(即右子树的最小值);将找到的这个节点删除;将删除节点的值赋值给cur的值。

void removeItem(BinarySearchTree* bst, int num)
{if(bst -> root == NULL){ return;}TreeNode* cur = bst->root, *prev = NULL;while(cur != NULL) //cur可以指向空,只是指向空之后就不能再进入循环了{if(cur->data = num)  break;prev = cur;if(cur -> data < num){ cur = cur -> right;}else { cur = cur -> left;}}if(cur == NULL) return; //没有找到要删除的值 直接退出if(cur->left == NULL || cur->right == NULL){    TreeNode* child = cur ->left != NULL ? cur->left : cur->right;if(pre->right == cur){pre ->right = child;}else{ pre->left =child;}free(cur);}else{   TreeNode* tmp = cur->right;while(tmp->left !=NULL){tmp = tmp -> left;}int tmpval = tmp->data;removeItem(bst,tmp->val);//删除找到的右子树的最小值cur -> data = tmpval;}
}   

class Solution {
public:bool isValidBSTHelp(struct TreeNode* root,long min_val, long max_val){if(root == NULL)  return true;//空树也是BSTif(root->val <= min_val || root->val >= max_val) return false; //树根的值必须在这个范围内//根的值是左子树的上界 是右子树的下界 两个同时满足才可返回truereturn isValidBSTHelp(root->left,min_val,root->val)&&isValidBSTHelp(root->right,root->val,max_val);}bool isValidBST(TreeNode* root){return isValidBSTHelp(root,LONG_MIN,LONG_MAX);//两个宏值}
};

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     struct TreeNode *left;*     struct TreeNode *right;* };*///从根节点开始遍历//如果插入的值大于根往右走,判断根的右是不是为空//为空直接建节点就让pos->right = val//走一步判断右(pos->right)是否为空,为空就pos->right = val//左边也是同理struct TreeNode* creatTreeNode(int val) {struct TreeNode* ret = malloc(sizeof(struct TreeNode));ret->val = val;ret->left = ret->right = NULL;return ret;
}
struct TreeNode* insertIntoBST(struct TreeNode* root, int val) {if (root == NULL) {root = creatTreeNode(val);return root;}struct TreeNode* pos = root;//指向根while (pos != NULL) {if (val < pos->val) { //往左走if (pos->left == NULL) { //看左边是不是为空pos->left = creatTreeNode(val); //为空直接链入左子树break;} else {pos = pos->left; //左不为空继续往左走}} else {if (pos->right == NULL) {pos->right = creatTreeNode(val);break;} else {pos = pos->right;}}}return root;
}

 

class Solution {
public:TreeNode* deleteNode(TreeNode* root, int key) {TreeNode *cur = root, *curParent = nullptr;while (cur && cur->val != key) {curParent = cur;if (cur->val > key) {cur = cur->left;} else {cur = cur->right;}}if (!cur) {return root;}if (!cur->left && !cur->right) {cur = nullptr;} else if (!cur->right) {cur = cur->left;} else if (!cur->left) {cur = cur->right;} else {TreeNode *successor = cur->right, *successorParent = cur;while (successor->left) {successorParent = successor;successor = successor->left;}if (successorParent->val == cur->val) {successorParent->right = successor->right;} else {successorParent->left = successor->right;}successor->right = cur->right;successor->left = cur->left;cur = successor;}if (!curParent) {return cur;} else {if (curParent->left && curParent->left->val == key) {curParent->left = cur;} else {curParent->right = cur;}return root;}}
};

 

http://www.dtcms.com/wzjs/28752.html

相关文章:

  • 售后服务规范网站建设北京环球影城每日客流怎么看
  • 官方网站建设市场营销策划方案书
  • 深圳品牌网站设计专家seo优化包括
  • 网站开发那个好怎么去做网络推广
  • 柳州网站建设找哪家windows优化大师可靠吗
  • 永久建站空间购买11月将现新冠感染高峰
  • 行业网站名录百度发布平台官网
  • 千素网站建设中国的搜索引擎有哪些
  • 多用户商城网站开发班级优化大师怎么加入班级
  • 郑州建网站的好处seo培训价格
  • 北京网站优化对策中国优化网
  • 大学生网站建设结题报告seo网站关键词排名快速
  • 重庆专业网站建设公司哪家好百度收录怎么查询
  • 国家疫情防控最新政策第十版深圳百度推广seo公司
  • 网站策划要遵循的原则中国婚恋网站排名
  • 黄岩城乡住房和建设局网站游戏优化是什么意思
  • 苏州企业管理咨询服务网站及搜索引擎优化建议
  • 德阳网站建设.comseo分析工具有哪些
  • 网站设计就业岗位分析网站制作费用
  • 网站建设惠州国内seo公司
  • 资料查询网站建设合肥网站seo推广
  • 网站首页 选择入口 设计北京seo顾问推推蛙
  • 电商网站网址大全学历提升哪个教育机构好一些
  • wordpress对php版本seo人才网
  • 专业seo网站天津seo排名扣费
  • 网站验证码插件活动营销方案
  • .xyz做网站怎么样网站分为哪几种类型
  • 南宁网站建设推广app定制开发
  • 网站搭建 商城 seo百度刷排名百度快速排名
  • 表格如何给网站做链接地址网络营销课程培训机构