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

全广告网站长沙网络营销 公司

全广告网站,长沙网络营销 公司,电脑制作ppt的软件,美食的网页设计实现一个二叉搜索树迭代器类BSTIterator #xff0c;表示一个按中序遍历二叉搜索树#xff08;BST#xff09;的迭代器#xff1a; BSTIterator(TreeNode root) 初始化 BSTIterator 类的一个对象。BST 的根节点 root 会作为构造函数的一部分给出。指针应初始化为一个不存在…实现一个二叉搜索树迭代器类BSTIterator 表示一个按中序遍历二叉搜索树BST的迭代器 BSTIterator(TreeNode root) 初始化 BSTIterator 类的一个对象。BST 的根节点 root 会作为构造函数的一部分给出。指针应初始化为一个不存在于 BST 中的数字且该数字小于 BST 中的任何元素。 boolean hasNext() 如果向指针右侧遍历存在数字则返回 true 否则返回 false 。 int next()将指针向右移动然后返回指针处的数字。 注意指针初始化为一个不存在于 BST 中的数字所以对 next() 的首次调用将返回 BST 中的最小元素。 你可以假设 next() 调用总是有效的也就是说当调用 next() 时BST 的中序遍历中至少存在一个下一个数字。 示例 输入 [“BSTIterator”, “next”, “next”, “hasNext”, “next”, “hasNext”, “next”, “hasNext”, “next”, “hasNext”] [[[7, 3, 15, null, null, 9, 20]], [], [], [], [], [], [], [], [], []] 输出 [null, 3, 7, true, 9, true, 15, true, 20, false] 解释 BSTIterator bSTIterator new BSTIterator([7, 3, 15, null, null, 9, 20]); bSTIterator.next(); // 返回 3 bSTIterator.next(); // 返回 7 bSTIterator.hasNext(); // 返回 True bSTIterator.next(); // 返回 9 bSTIterator.hasNext(); // 返回 True bSTIterator.next(); // 返回 15 bSTIterator.hasNext(); // 返回 True bSTIterator.next(); // 返回 20 bSTIterator.hasNext(); // 返回 False 提示 树中节点的数目在范围 [1, 105] 内 0 Node.val 106 最多调用 105 次 hasNext 和 next 操作 进阶 你可以设计一个满足下述条件的解决方案吗next() 和 hasNext() 操作均摊时间复杂度为 O(1) 并使用 O(h) 内存。其中 h 是树的高度。 法一先在构造函数中把整个二叉树的中序遍历存下来 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/ class BSTIterator { public:BSTIterator(TreeNode* root) : curIdx(0),inorderRes(){inorder(root);}int next() {return inorderRes[curIdx];}bool hasNext() {return curIdx inorderRes.size();}private:int curIdx;vectorint inorderRes;void inorder(TreeNode *node){if (node nullptr){return;}inorder(node-left);inorderRes.push_back(node-val);inorder(node-right);} };/*** Your BSTIterator object will be instantiated and called as such:* BSTIterator* obj new BSTIterator(root);* int param_1 obj-next();* bool param_2 obj-hasNext();*/如果树中有n个节点此算法构造函数的时间复杂度为O(n)next和hasNext方法的时间复杂度为O(1)空间复杂度为O(n)构造函数的栈空间平均需要O(logn)最差需要O(n)存储中序遍历的结果需要O(n)。 法二手动模拟一个栈 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/ class BSTIterator { public:BSTIterator(TreeNode* root) {curNode root;}int next() {while (curNode ! nullptr){s.push(curNode);curNode curNode-left;}curNode s.top();int ret curNode-val;s.pop();curNode curNode-right;return ret;}bool hasNext() {return !s.empty() || curNode;}private:stackTreeNode * s;TreeNode *curNode; };/*** Your BSTIterator object will be instantiated and called as such:* BSTIterator* obj new BSTIterator(root);* int param_1 obj-next();* bool param_2 obj-hasNext();*/如果树中有n个节点此算法构造函数和hasNext方法的时间复杂度为O(1)next方法的时间复杂度平均为O(1)最差为O(n)空间复杂度为O(logn)模拟的栈空间平均需要O(logn)最差需要O(n)。 法三Morris遍历核心是将当前节点的前驱结点连到当前节点这样就不需要栈了对于中序遍历来说就是将当前节点的左节点的最右节点指向自身 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/ class BSTIterator { public:BSTIterator(TreeNode* root) : curNode(root){}int next() {if (curNode-left nullptr){int res curNode-val;curNode curNode-right;return res;}while (curNode-left){TreeNode *mostRightOfLeft getMostRightOfLeft(curNode);if (mostRightOfLeft-right nullptr){mostRightOfLeft-right curNode;curNode curNode-left;}else if (mostRightOfLeft-right curNode){int res curNode-val;mostRightOfLeft-right nullptr;curNode curNode-right;return res;}}int res curNode-val;curNode curNode-right;return res;}bool hasNext() {return curNode;}private:TreeNode *curNode;TreeNode *getMostRightOfLeft(TreeNode *node){TreeNode *cur node-left;while (cur-right ! nullptr cur-right ! node){cur cur-right;}return cur;} };/*** Your BSTIterator object will be instantiated and called as such:* BSTIterator* obj new BSTIterator(root);* int param_1 obj-next();* bool param_2 obj-hasNext();*/如果树中有n个节点此算法构造函数和hasNext方法的时间复杂度为O(1)next方法的时间复杂度平均为O(1)最差为O(n)空间复杂度为O(1)。
http://www.zqtcl.cn/news/848609/

相关文章:

  • 硬盘做免费嗳暧视频网站黄冈免费网站推广平台汇总
  • node做网站怎么知道蜘蛛来过怎么学网站设计
  • 青海省建设厅网站公示公告简单建站
  • 手机网站用什么后台wordpress 百度蜘蛛
  • 网站文章伪原创怎么做手机网站 程序
  • 网站建设每月工作多少开发小程序的目的
  • 社区网站建设方案pptwordpress用户名在哪看
  • 浙江企业响应式网站建设公司简介如何写
  • 自己做静态网站的步骤店面设计在线
  • 活动汪活动策划网站wordpress 无法保存
  • 门户网站开发案例兰州需要做网站的公司有哪些
  • 东莞企业网站asp网站怎么安装
  • 个人做公司网站网站备案取消接入
  • 崇信网站建设it外包的收益主要有哪些
  • 安陆做网站多少钱免费网站定制
  • 快递网站模版长春好的做网站公司有哪些
  • 怎么利用公司网站开发客户网站建设重点步骤
  • 网站站内推广用个人电脑做网站的步骤
  • 网站设计主要包含3个方面陕西城乡住房建设部网站
  • 专门做汽车配件的网站东莞招聘网有哪些比较好
  • 网站前台怎么套用织梦后台小网站怎么建设
  • 网站框架代码深圳手机网站设计
  • 更改网站主题九江建网站的公司
  • 如何分析一个网站网站页面建设
  • 做网站好网页制作3个网页的网站图片
  • 合肥网站建设网站推广新的网站建设一般多少钱
  • 北京网站改版哪家好网站关键词怎样做优化
  • 网站开发行业分析wordpress 粘贴表格
  • 网站开发的招标参数网络科技公司网站源码下载
  • 属于网络营销站点推广的是seo好wordpress主题