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

哈尔滨教育学会网站建设专业的seo排名优化

哈尔滨教育学会网站建设,专业的seo排名优化,网站上的漂浮广告,在家做电商怎么做235 二叉搜索树的最近公共祖先 如果利用普通二叉树的方法#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.pierceye.com/news/343165/

相关文章:

  • 网上注册公司流程及材料sem seo是什么意思呢
  • 网站开发后所有权广州市官网网站建设
  • 公司网站宣传设计北京市住房与建设厅官方网站
  • 企业信息化建设如何帮助客户理解网站流量怎么给自己网站做搜索框
  • 公司网站不续费农村未来10大暴利行业
  • 代做设计网站好跨境电商排名
  • 网站备案状态查询东莞智通人才市场招聘官网
  • 做微网站要多少钱更合网站设计制作
  • 网站如何留住客户企业建设网站需要注意什么
  • 中国最受欢迎的网站网站建设要知道的
  • 软件开发公司网站模板天津网站建设方案报价
  • 做面条的网站旅游网络营销如何做
  • 知乎的网站建设和网站运营网站建设需求说明
  • 天津做陶瓷的公司网站番禺核酸检测定点医院名单
  • 教育网站赏析delphi网站开发教程
  • 电商网站设计说明书php网站服务器架设
  • 精品课程网站开发项目电子商务的分类
  • 网站建设成品动漫网站建设答辩ppt
  • 邯郸网站设计价格做网站哪便宜
  • 建设网站的一般步骤网站设计下载
  • 广东同江医院网站建设建站网站图片不显示
  • 免费在线响应式网站自助建站网站网页怎么设计
  • 池州网站建设抚顺网站建设公司
  • 网站如可引导客户义乌小程序开发制作公司
  • 环境设计排版素材网站周口市住房和城乡建设局网站
  • 建设部资质查询网站wordpress采集英文
  • 深圳北站设计方案高质量网站外链平台
  • 苏州做网站优化的公司国外 网站页面
  • 网站建设流程发布网站和网页制作鲜花网站建设论文百度文库
  • 建个人网站赚钱吗手机网站页面大小