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

专业烟台房产网站建设河南省财政厅经济建设网站

专业烟台房产网站建设,河南省财政厅经济建设网站,广州免费律师援助,做网站赚钱的时代过去了吗题目#xff1a; 给定二叉搜索树#xff08;BST#xff09;的根节点 root 和要插入树中的值 value #xff0c;将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据 保证 #xff0c;新值和原始二叉搜索树中的任意节点值都不同。 注意#xff0c;可能存在多…题目 给定二叉搜索树BST的根节点 root 和要插入树中的值 value 将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据 保证 新值和原始二叉搜索树中的任意节点值都不同。 注意可能存在多种有效的插入方式只要树在插入后仍保持为二叉搜索树即可。 你可以返回 任意有效的结果 。 示例 1 输入root [4,2,7,1,3], val 5 输出[4,2,7,1,3,5] 解释另一个满足题目要求可以通过的树是 示例 2 输入root [40,20,60,10,30,50,70], val 25 输出[40,20,60,10,30,50,70,null,null,25] 示例 3 输入root [4,2,7,1,3,null,null,null,null,null,null], val 5 输出[4,2,7,1,3,5] 提示 树中的节点数将在 [0, 104]的范围内。-108 Node.val 108所有值 Node.val 是 独一无二 的。-108 val 108保证 val 在原始BST中不存在。 思路 如下演示视频中可以看出只要按照二叉搜索树的规则去遍历遇到空节点就插入节点就可以了。 例如插入元素10 需要找到末尾节点插入便可一样的道理来插入元素15插入元素0插入元素6需要调整二叉树的结构么 并不需要。。 只要遍历二叉搜索树找到空节点 插入元素就可以了那么这道题其实就简单了。 接下来就是遍历二叉搜索树的过程了。 递归法 递归三部曲 确定递归函数参数以及返回值 参数就是根节点指针以及要插入元素这里递归函数要不要有返回值呢 可以有也可以没有但递归函数如果没有返回值的话实现是比较麻烦的。 有返回值的话可以利用返回值完成新加入的节点与其父节点的赋值操作。 递归函数的返回类型为节点类型TreeNode * 。 代码如下 TreeNode* insertIntoBST(TreeNode* root, int val)确定终止条件 终止条件就是找到遍历的节点为null的时候就是要插入节点的位置了并把插入的节点返回。 代码如下 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;到这里应该能感受到如何通过递归函数返回值完成了新加入节点的父子关系赋值操作了下一层将加入节点返回本层用root-left或者root-right将其接住。 迭代法 在迭代法遍历的过程中需要记录一下当前遍历的节点的父节点这样才能做插入节点的操作。 因为迭代的循环退出后当前节点cur为NULL且cur的位置就是要插入元素的位置所以要记录该节点的父节点parent进行赋值。 代码 递归法 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);else 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){ // 退出循环后此时的cur为空且cur的位置就是插入元素的位置所以根据cur的父节点parent赋值parent cur;if(cur-val val) cur cur-left;else if(cur-val val) cur cur-right;}// 根据parent赋值TreeNode* node new TreeNode(val);if(parent-val val) parent-left node;else parent-right node;return root;} };总结 首先在二叉搜索树中的插入操作不用恐惧其重构搜索树其实根本不用重构。 然后在递归中重点讲了如何通过递归函数的返回值完成新加入节点和其父节点的赋值操作并强调了搜索树的有序性。 最后依然给出了迭代的方法迭代的方法就需要记录当前遍历节点的父节点了这个和没有返回值的递归函数实现的代码逻辑是一样的。 参考 代码随想录
http://www.pierceye.com/news/216865/

相关文章:

  • 淘宝客网站女装模板下载wordpress5 没有块引用
  • 35网站建设博客移动端网站模板
  • 卡盟网站建设公司品牌策划ppt
  • 自己如何做网站教程广州建网站有哪些
  • 网站建设 市场规模加强财政门户网站建设工作
  • wordpress 搭建多站点电子商务网站
  • 免费制作网页的网站万网租空间 网站
  • 上海 网站 备案ios开发网站app
  • 网站建设,h5,小程序众安保险
  • 大连网站建设资讯网站seo如何优化
  • 手表网站建设策划西地那非片怎么服用最佳
  • 常德网站设计英文版网站怎么做
  • 权威网站建设网站的工具
  • php手机网站模板厦门网站设计建设
  • 焦作集团网站建设做食品网站需要什么资质
  • 西北电力建设甘肃工程公司网站90设计电商模板
  • 内蒙古网站设计推广网站注册赚佣金
  • 医药类网站建设评价wordpress微信支付模板
  • 如何查看网站空间商手机服务器下载安装
  • 北京响应式网站建设报价英文版网站案例
  • 做爰全过程免费的视频99网站做h5单页的网站
  • 怎么才能百度做网站海外直播
  • 响应式企业网站开发所用的平台酷炫网站首页
  • 西安网站建设全包大发 wordpress
  • html5 网站开发定制做公司网站好处
  • 建站网站教程网站建设工程师职责说明书
  • 新云网站模版宠物网站开发
  • 网站建设面授班网站备案回访电话号码
  • 阿里有做网站网站建设费是宣传费用吗
  • 点广告挣钱网站有哪些网站的建设与预算