日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

LeetCode 1586. 二叉搜索树迭代器 II(数组+栈)

發(fā)布時(shí)間:2024/7/5 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LeetCode 1586. 二叉搜索树迭代器 II(数组+栈) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

    • 1. 題目
    • 2. 解題

1. 題目

實(shí)現(xiàn)二叉搜索樹(shù)(BST)的中序遍歷迭代器 BSTIterator 類:

  • BSTIterator(TreeNode root) 初始化 BSTIterator 類的實(shí)例。
    二叉搜索樹(shù)的根節(jié)點(diǎn) root 作為構(gòu)造函數(shù)的參數(shù)傳入。
    內(nèi)部指針使用一個(gè)不存在于樹(shù)中且小于樹(shù)中任意值的數(shù)值來(lái)初始化。
  • boolean hasNext() 如果當(dāng)前指針在中序遍歷序列中,存在右側(cè)數(shù)值,返回 true ,否則返回 false 。
  • int next() 將指針在中序遍歷序列中向右移動(dòng),然后返回移動(dòng)后指針?biāo)笖?shù)值。
  • boolean hasPrev() 如果當(dāng)前指針在中序遍歷序列中,存在左側(cè)數(shù)值,返回 true ,否則返回 false 。
  • int prev() 將指針在中序遍歷序列中向左移動(dòng),然后返回移動(dòng)后指針?biāo)笖?shù)值。

注意,雖然我們使用樹(shù)中不存在的最小值來(lái)初始化內(nèi)部指針,第一次調(diào)用 next() 需要返回二叉搜索樹(shù)中最小的元素。

你可以假設(shè) next() 和 prev() 的調(diào)用總是有效的
即,當(dāng) next()/prev() 被調(diào)用的時(shí)候,在中序遍歷序列中一定存在下一個(gè)/上一個(gè)元素。

進(jìn)階:你可以不提前遍歷樹(shù)中的值來(lái)解決問(wèn)題嗎?

示例 1:

輸入 ["BSTIterator", "next", "next", "prev", "next", "hasNext", "next", "next", "next", "hasNext", "hasPrev", "prev", "prev"] [[[7, 3, 15, null, null, 9, 20]], [null], [null], [null], [null], [null], [null], [null], [null], [null], [null], [null], [null]] 輸出 [null, 3, 7, 3, 7, true, 9, 15, 20, false, true, 15, 9]解釋 // 劃線的元素表示指針當(dāng)前的位置。 BSTIterator bSTIterator = new BSTIterator([7, 3, 15, null, null, 9, 20]); // 當(dāng)前狀態(tài)為 <u> </u> [3, 7, 9, 15, 20] bSTIterator.next(); // 狀態(tài)變?yōu)?[<u>3</u>, 7, 9, 15, 20], 返回 3 bSTIterator.next(); // 狀態(tài)變?yōu)?[3, <u>7</u>, 9, 15, 20], 返回 7 bSTIterator.prev(); // 狀態(tài)變?yōu)?[<u>3</u>, 7, 9, 15, 20], 返回 3 bSTIterator.next(); // 狀態(tài)變?yōu)?[3, <u>7</u>, 9, 15, 20], 返回 7 bSTIterator.hasNext(); // 返回 true bSTIterator.next(); // 狀態(tài)變?yōu)?[3, 7, <u>9</u>, 15, 20], 返回 9 bSTIterator.next(); // 狀態(tài)變?yōu)?[3, 7, 9, <u>15</u>, 20], 返回 15 bSTIterator.next(); // 狀態(tài)變?yōu)?[3, 7, 9, 15, <u>20</u>], 返回 20 bSTIterator.hasNext(); // 返回 false bSTIterator.hasPrev(); // 返回 true bSTIterator.prev(); // 狀態(tài)變?yōu)?[3, 7, 9, <u>15</u>, 20], 返回 15 bSTIterator.prev(); // 狀態(tài)變?yōu)?[3, 7, <u>9</u>, 15, 20], 返回 9提示: 樹(shù)中節(jié)點(diǎn)個(gè)數(shù)的范圍是 [1, 10^5]0 <= Node.val <= 106 最多調(diào)用 105 次 hasNext、 next、 hasPrev 和 prev 。

來(lái)源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/binary-search-tree-iterator-ii
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系官方授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。

2. 解題

  • 用棧來(lái)進(jìn)行中序遍歷
  • 用數(shù)組來(lái)存儲(chǔ)已經(jīng)遍歷過(guò)的節(jié)點(diǎn)(被彈棧的),同時(shí)用一個(gè) idx 記錄當(dāng)前的位置,如果超出數(shù)組范圍就去棧內(nèi)取節(jié)點(diǎ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 {stack<TreeNode*> nstack;vector<TreeNode*> pstack;int prevIdx = 0; public:BSTIterator(TreeNode* root) {while(root){nstack.push(root);root = root->left;}}bool hasNext() {return !nstack.empty() || prevIdx+1 < pstack.size();}int next() {if(prevIdx+1 < pstack.size())return pstack[++prevIdx]->val;TreeNode* node = nstack.top();nstack.pop();pstack.push_back(node);prevIdx = pstack.size()-1;int v = node->val;TreeNode* t = node->right;while(t){nstack.push(t);t = t->left;}return v;}bool hasPrev() {return prevIdx > 0;}int prev() {prevIdx--;return pstack[prevIdx]->val;} };/*** Your BSTIterator object will be instantiated and called as such:* BSTIterator* obj = new BSTIterator(root);* bool param_1 = obj->hasNext();* int param_2 = obj->next();* bool param_3 = obj->hasPrev();* int param_4 = obj->prev();*/

304 ms 147 MB C++


我的CSDN博客地址 https://michael.blog.csdn.net/

長(zhǎng)按或掃碼關(guān)注我的公眾號(hào)(Michael阿明),一起加油、一起學(xué)習(xí)進(jìn)步!

總結(jié)

以上是生活随笔為你收集整理的LeetCode 1586. 二叉搜索树迭代器 II(数组+栈)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 成人免费在线网站 | 日本一区二区三区免费看 | 综合久久99 | 精品福利一区 | 办公室荡乳欲伦交换bd电影 | 亚洲精品小说 | 亚洲精品一区二区 | 国产一区二区色 | 三上悠亚人妻中文字幕在线 | 亚洲一卡二卡 | 成人一级在线 | 久久视频在线 | 国内自拍99 | 久久大尺度 | 日日操网站| 国产三级视频在线 | 亚欧美色图| 成人福利视频网站 | 一区视频在线 | 亚洲制服无码 | 永久免费av网站 | 日韩欧美国产三级 | 日本aⅴ在线 | 土耳其xxxx性hd极品 | 狠狠干夜夜干 | 亚洲天堂精品在线观看 | 国产性色av | 在线观看sm | 我们的生活第五季在线观看免费 | 99资源 | 欧美性区| 天天操你 | 欧美一区二区公司 | 少妇闺蜜换浪荡h肉辣文 | 人人爽夜夜爽 | 成人免费看类便视频 | 成人在线网 | 日韩欧美在线观看视频 | 亚洲视频小说 | 国产精品二三区 | 九九热这里都是精品 | 欧洲色综合 | 夜夜欢视频 | 国产又粗又大又硬 | 免费av一级片 | 日韩精品成人一区二区在线 | 亚洲一区二区三区在线免费观看 | 日韩中文字幕久久 | 成人av播放 | 欧美一区二区视频免费观看 | 91黄色看片 | 国产精品性色 | 久久久精品在线 | 日批大全| 初尝人妻少妇中文字幕 | 日韩视频在线免费观看 | 黄色高清片 | 中文字幕+乱码+中文字幕一区 | av最新在线| 在线观看网站av | 亚洲视频一区二区三区在线观看 | 日本特黄特色aaa大片免费 | 久久中文字幕网 | 国产精品嫩草av | 日韩福利视频 | 久久精品视频2 | 182av| 最近的中文字幕 | 尤物视频在线观看国产性感 | 99自拍视频在线观看 | 秋霞欧洲 | 亚洲网址在线观看 | 亚洲精品第三页 | 在线观看av日韩 | 欧美三级又粗又硬 | 99re6这里有精品热视频 | 国产日韩亚洲欧美 | 三级中文字幕 | 黄色av网站免费 | 粉嫩av在线 | 冈本视频在线观看 | 国产日产精品一区 | 日本高清不卡码 | 在线观看日韩一区二区 | 凹凸国产熟女精品视频 | 久久国产香蕉视频 | 日韩污污 | 毛片999| 美女扒开腿让男人捅 | 91精品人妻一区二区三区蜜桃欧美 | 久久老司机精品视频 | av高清在线免费观看 | 天堂色播 | aa视频网站 | 美女又爽又黄视频毛茸茸 | 国产香蕉视频 | 无码精品人妻一区二区三区影院 | 精人妻无码一区二区三区 | 全部免费毛片在线播放 |