LeetCode 1586. 二叉搜索树迭代器 II(数组+栈)
生活随笔
收集整理的這篇文章主要介紹了
LeetCode 1586. 二叉搜索树迭代器 II(数组+栈)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
文章目錄
- 1. 題目
- 2. 解題
1. 題目
實(shí)現(xiàn)二叉搜索樹(BST)的中序遍歷迭代器 BSTIterator 類:
- BSTIterator(TreeNode root) 初始化 BSTIterator 類的實(shí)例。
二叉搜索樹的根節(jié)點(diǎn) root 作為構(gòu)造函數(shù)的參數(shù)傳入。
內(nèi)部指針使用一個(gè)不存在于樹中且小于樹中任意值的數(shù)值來初始化。 - 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ù)值。
注意,雖然我們使用樹中不存在的最小值來初始化內(nèi)部指針,第一次調(diào)用 next() 需要返回二叉搜索樹中最小的元素。
你可以假設(shè) next() 和 prev() 的調(diào)用總是有效的。
即,當(dāng) next()/prev() 被調(diào)用的時(shí)候,在中序遍歷序列中一定存在下一個(gè)/上一個(gè)元素。
進(jìn)階:你可以不提前遍歷樹中的值來解決問題嗎?
示例 1:
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/binary-search-tree-iterator-ii
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有。商業(yè)轉(zhuǎn)載請聯(lián)系官方授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。
2. 解題
- 用棧來進(jìn)行中序遍歷
- 用數(shù)組來存儲(chǔ)已經(jīng)遍歷過的節(jié)點(diǎn)(被彈棧的),同時(shí)用一個(gè) idx 記錄當(dāng)前的位置,如果超出數(shù)組范圍就去棧內(nèi)取節(jié)點(diǎn)
304 ms 147 MB C++
我的CSDN博客地址 https://michael.blog.csdn.net/
長按或掃碼關(guān)注我的公眾號(Michael阿明),一起加油、一起學(xué)習(xí)進(jìn)步!
總結(jié)
以上是生活随笔為你收集整理的LeetCode 1586. 二叉搜索树迭代器 II(数组+栈)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LeetCode 1957. 删除字符使
- 下一篇: LeetCode 1786. 从第一个节