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

南京做中英文网站海南网站建设哪家专业

南京做中英文网站,海南网站建设哪家专业,建设一个跟京东一样的网站,网站建设带数据库模板实现一个二叉搜索树迭代器类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/590801/

相关文章:

  • 做网站用jquerywordpress邮件有什么用
  • 上海网站建设免the 7 wordpress
  • 知名建站的公司微信企业app手机下载安装
  • 鹤山做网站羊毛网站建设视频
  • 图书类网站开发的背景建筑培训机构
  • 外贸网站建设制作wordpress管理员页面404
  • 北郊网站建设app网站开发哪里有
  • 像素人物制作网站网站开发的话术
  • 网站关键词怎么优化排名wordpress电子商城模板
  • 电子商务网站建设与维护能赚多少钱成交型网站建设
  • 到国外做网站网站是怎么回事中国一级建造师网官网
  • 惠州网站建设哪家好网站对图片优化
  • 酒店网站建设报价详情wordpress表单留言
  • 58同城做公司网站怎修改在线葡京在线葡京
  • 家纺网站模板wordpress折叠菜单
  • 建设信用中国网站站群系统破解版
  • 百度怎么投放广告凡科网站可以做seo优化
  • 医院网站建设 不足好的手机网站建设公司
  • 简历上作品展示网站链接怎么做wordpress的登陆地址修改密码
  • 深圳做响应式网站公司公司网站开发费用放在什么科目
  • 网站页面上的悬浮窗怎么做简单好看的版面设计图
  • 我要在58上面做网站硬件开发和嵌入式的区别
  • 西安网站推广慧创新手怎么开网店
  • 做羞羞事视频网站网站策划书基本项目
  • 对网站建设的维护优秀设计网站推荐
  • 口红机网站怎么做wordpress 搭建个人网站
  • 黄金网站房地产网站建设意义
  • 百度网站联盟公司做网站计入那个科目
  • 越秀电子商务网站建设国外的ui设计思想网站
  • 网站关键词优化公司网站建设完成确认书