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

站长爱it电子商务网站建设服务模式论文

站长爱it,电子商务网站建设服务模式论文,网站 微信小程序怎么做,wordpress relevanssi235 二叉搜索树的最近公共祖先 如果利用普通二叉树的方法#xff0c;就是利用后序遍历回溯从低向上搜索#xff0c;遇到左子树有p#xff0c;右子树有q#xff0c;那么当前结点就是最近公共祖先。本题是二叉搜索树#xff0c;所以说是有序的#xff0c;一定能够简化上面…235 二叉搜索树的最近公共祖先 如果利用普通二叉树的方法就是利用后序遍历回溯从低向上搜索遇到左子树有p右子树有q那么当前结点就是最近公共祖先。本题是二叉搜索树所以说是有序的一定能够简化上面的方法。如果中间节点是p和q的公共祖先那么他一定是在p和q区间的即中节点 p 中节点 q 或者 中节点 q 中节点 p。所以在每次遍历时都加上这个判断条件会比较好。递归代码如下 class Solution { private:TreeNode* traversal(TreeNode* cur, TreeNode* p, TreeNode* q) {if (cur NULL) return cur;// 中if (cur-val p-val cur-val q-val) { // 左TreeNode* left traversal(cur-left, p, q);if (left ! NULL) {return left;}}if (cur-val p-val cur-val q-val) { // 右TreeNode* right traversal(cur-right, p, q);if (right ! NULL) {return right;}}return cur;} public:TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {return traversal(root, p, q);} }; 当然本题代码还可以精简 class Solution { public:TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {if (root-val p-val root-val q-val) {return lowestCommonAncestor(root-left, p, q);} else if (root-val p-val root-val q-val) {return lowestCommonAncestor(root-right, p, q);} else return root;} }; 因为是二叉搜索树所以迭代法也很简单一般二叉搜索树迭代法都比普通二叉树简单因为这棵树是有序的 class Solution { public:TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {while(root) {if (root-val p-val root-val q-val) {root root-left;} else if (root-val p-val root-val q-val) {root root-right;} else return root;}return NULL;} }; 701 二叉搜索树的插入操作 进行二叉搜索树的插入操作并不需要调整二叉树的结构因为特殊性每次插入的结点都能插入到叶子上面所以递归的方法就比较简单了 class Solution { public:TreeNode* insertIntoBST(TreeNode* root, int val) {if (root NULL) {TreeNode* node new TreeNode(val);return node;}if (root-val val) root-left insertIntoBST(root-left, val);if (root-val val) root-right insertIntoBST(root-right, val);return root;} }; 本题也可以利用迭代法 class Solution { public:TreeNode* insertIntoBST(TreeNode* root, int val) {//如果为空节点此时直接进行插入说明是一颗空树if (root NULL) {TreeNode* node new TreeNode(val);return node;}TreeNode* cur root; //记录当前的结点TreeNode* parent root; // 这个很重要需要记录上一个节点否则无法赋值新节点while (cur ! NULL) {parent cur; //上一个结点接连等于当前结点之后当前结点变动if (cur-val val) cur cur-left;else cur cur-right;}//此时遍历到空节点了也就是要插入val的位置TreeNode* node new TreeNode(val);if (val parent-val) parent-left node;// 此时是用parent节点的进行赋值else parent-right node;return root;} }; 450 删除二叉搜索树中的结点 注意此时有些情况就需要改变二叉树的结构了因为删除的并不一定是叶子节点。 class Solution { public:TreeNode* deleteNode(TreeNode* root, int key) {if(root nullptr) return root; //如果是空节点直接返回说明没有找到要删除的节点if(root-val key){//要删除的节点为叶子结点if(root-leftnullptrroot-rightnullptr){delete root;return nullptr;}//要删除的节点左空右不空if(root-leftnullptrroot-right!nullptr){TreeNode* node root-right;delete root;return node;}//要删除的结点左不空右空if(root-left!nullptrroot-rightnullptr){TreeNode* node root-left;delete root;return node;}//要删除的节点左右都不空让右面的结点顶替他当然左面的也可以这里只写一种if(root-left!nullptrroot-right!nullptr){TreeNode* cur root-right;while(cur-left) cur cur-left;cur-leftroot-left;TreeNode* tmp root;root root-right;delete tmp;return root;}}if(root-val key) root-left deleteNode(root-left, key);if(root-val key) root-right deleteNode(root-right, key);return root;} }; 这里我在介绍一种通用的删除普通二叉树的删除方式没有使用搜索树的特性遍历整棵树用交换值的操作来删除目标节点。 代码中目标节点要删除的节点被操作了两次 第一次是和目标节点的右子树最左面节点交换。第二次直接被NULL覆盖了。 class Solution { public:TreeNode* deleteNode(TreeNode* root, int key) {if (root nullptr) return root;if (root-val key) {if (root-right nullptr) { // 这里第二次操作目标值最终删除的作用return root-left;}TreeNode *cur root-right;while (cur-left) {cur cur-left;}swap(root-val, cur-val); // 这里第一次操作目标值交换目标值其右子树最左面节点。}root-left deleteNode(root-left, key);root-right deleteNode(root-right, key);return root;} }; 迭代法 class Solution { private:// 将目标节点删除节点的左子树放到 目标节点的右子树的最左面节点的左孩子位置上// 并返回目标节点右孩子为新的根节点// 是动画里模拟的过程TreeNode* deleteOneNode(TreeNode* target) {if (target nullptr) return target;if (target-right nullptr) return target-left;TreeNode* cur target-right;while (cur-left) {cur cur-left;}cur-left target-left;return target-right;} public:TreeNode* deleteNode(TreeNode* root, int key) {if (root nullptr) return root;TreeNode* cur root;TreeNode* pre nullptr; // 记录cur的父节点用来删除curwhile (cur) {if (cur-val key) break;pre cur;if (cur-val key) cur cur-left;else cur cur-right;}if (pre nullptr) { // 如果搜索树只有头结点return deleteOneNode(cur);}// pre 要知道是删左孩子还是右孩子if (pre-left pre-left-val key) {pre-left deleteOneNode(cur);}if (pre-right pre-right-val key) {pre-right deleteOneNode(cur);}return root;} };
http://www.w-s-a.com/news/164845/

相关文章:

  • 建立网站的基本步骤新网站多久会被百度收录
  • 软件设计开发流程图廊坊关键词seo排名方案
  • 南山住房和建设局网站网站被k 多久恢复
  • 阿里买域名 电脑做网站做简历哪个网站好
  • 个人网站免费服务器单页网站的域名
  • 网站设计简单讲解小店怎么做网站
  • 校园网站的意义wordpress去除更新
  • 网站开发用python吗常用的网页开发工具有哪些
  • 北京市住房建设投资建设网站做商城网站要哪些流程
  • seo网站改版杭州建设局官网
  • 物流网站建设策划书泰然建设网站
  • 百度做网站的费用采集发布wordpress
  • 网站运维公司有哪些防录屏网站怎么做
  • 昆明做网站seo的网站制作专业
  • 聊城制作手机网站公司wordpress 头条
  • 商城微网站模板一般电商网站做集群
  • winserver2008上用iis发布网站嵊州网站制作
  • 网站内页权重怎么查辽宁建设工程信息网怎么上传业绩
  • 丰都网站建设价格镇江网站制作费用
  • app手机网站建设黄网站建设定制开发服务
  • 百度网盘app下载徐州优化网站建设
  • 附近网站电脑培训班展台设计方案介绍
  • 河南便宜网站建设价格低上海高端室内设计
  • 保险网站有哪些平台wordpress会员vip购买扩展
  • 网站怎么做图片转换广州车陂网站建设公司
  • 下载flash网站网站设计书的结构
  • 水利建设公共服务平台网站放心网络营销定制
  • 设计网站过程wordpress+分页静态
  • 临海网站制作好了如何上线如果安装wordpress
  • 长沙 学校网站建设网站制作价格上海