摘要:代碼先找到第一個節(jié)點,并把路徑入棧棧為空時不再有下一個棧頂是待返回元素如果該元素有右節(jié)點,把它的右節(jié)點及右節(jié)點的所有左邊節(jié)點都壓入棧中
Binary Search Tree Iterator 最新更新:https://yanjia.me/zh/2019/02/...
Implement an iterator over a binary search tree (BST). Your iterator will be initialized with the root node of a BST.棧法 復雜度Calling next() will return the next smallest number in the BST.
Note: next() and hasNext() should run in average O(1) time and uses O(h) memory, where h is the height of the tree.
時間 O(N) 空間 O(1)
思路這道題和Inorder Successor in BST很像,區(qū)別在于Successor那題是給定節(jié)點求下一個,而這題是要做一個迭代器,返回當前指向的值,其實就是求上次返回的節(jié)點的下一個,本質(zhì)是一樣的。題目要求最多只能用O(H)的空間,所以思路也和那題一樣,用一個Stack記錄從根節(jié)點到當前節(jié)點的路徑。next的時候就返回Stack最上面的元素。不過拿出最上面的元素后,我們還要看一下這個被返回的元素是否有右節(jié)點,如果有的話,就把它的右節(jié)點及右節(jié)點的所有左邊節(jié)點都壓入棧中。另外,初始化棧時,我們要找到最左邊的節(jié)點,也就是中序遍歷的第一個節(jié)點,并把根到第一個節(jié)點的路徑都壓入棧。
這題還可以結(jié)合Binary Tree Inorder Traverse的迭代做法一起理解。他們的共同點都是用一個棧,將最左邊的節(jié)點都壓入棧。
代碼public class BSTIterator { Stackstk; public BSTIterator(TreeNode root) { stk = new Stack (); // 先找到第一個節(jié)點,并把路徑入棧 while(root != null){ stk.push(root); root = root.left; } } public boolean hasNext() { // 棧為空時不再有下一個 return !stk.isEmpty(); } public int next() { // 棧頂是待返回元素 TreeNode curr = stk.pop(); int res = curr.val; // 如果該元素有右節(jié)點,把它的右節(jié)點及右節(jié)點的所有左邊節(jié)點都壓入棧中 if(curr.right != null){ curr = curr.right; while(curr != null){ stk.push(curr); curr = curr.left; } } return res; } }
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/64580.html
摘要:解題思路對于二叉搜索樹,我們很容易會想到使用棧和隊列來解決問題,本題是要求實現(xiàn)一個對二叉搜索樹的遍歷器,要求每次可以返回最小的節(jié)點值,我們使用棧。 Binary Search Tree IteratorImplement an iterator over a binary search tree (BST). Your iterator will be initialized with...
摘要:遞歸法復雜度時間空間思路根據(jù)二叉樹的性質(zhì),我們知道當遍歷到某個根節(jié)點時,最近的那個節(jié)點要么是在子樹里面,要么就是根節(jié)點本身。因為我們知道離目標數(shù)最接近的數(shù)肯定在二叉搜索的路徑上。 Closest Binary Search Tree Value I Given a non-empty binary search tree and a target value, find the va...
摘要:在線網(wǎng)站地址我的微信公眾號完整題目列表從年月日起,每天更新一題,順序從易到難,目前已更新個題。這是項目地址歡迎一起交流學習。 這篇文章記錄我練習的 LeetCode 題目,語言 JavaScript。 在線網(wǎng)站:https://cattle.w3fun.com GitHub 地址:https://github.com/swpuLeo/ca...我的微信公眾號: showImg(htt...
摘要:題目地址嗯,經(jīng)典的題目,中序遍歷二叉樹。代碼如下中序遍歷先序遍歷后序遍歷是不是簡單的不要不要的,遞歸就是這么美。右孩子后壓棧全部釋放出來嗯,總的來說用迭代遍歷確實燒腦,沒什么性能上的特殊需求還是用遞歸寫法吧,對程序員友好哦。 94. Binary Tree Inorder Traversal Given a binary tree, return the inorder travers...
摘要:注意這里的結(jié)構(gòu)和不同的二叉樹遍歷一樣,如果到空節(jié)點就返回,否則遞歸遍歷左節(jié)點和右節(jié)點。唯一不同是加入了和,所以要在遞歸之前先判斷是否符合和的條件。代碼如果該節(jié)點大于上限返回假如果該節(jié)點小于下限返回假遞歸判斷左子樹和右子樹 Validate Binary Search Tree Given a binary tree, determine if it is a valid binary...
閱讀 961·2021-11-24 09:39
閱讀 3383·2021-10-27 14:20
閱讀 2322·2019-08-30 14:08
閱讀 3361·2019-08-29 16:34
閱讀 2177·2019-08-26 12:14
閱讀 2104·2019-08-26 11:54
閱讀 2772·2019-08-26 11:44
閱讀 2474·2019-08-26 11:38