成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

[Leetcode - Tree] Binary Search Tree Iterator

jsyzchen / 896人閱讀

摘要:解題思路對于二叉搜索樹,我們很容易會想到使用棧和隊(duì)列來解決問題,本題是要求實(shí)現(xiàn)一個(gè)對二叉搜索樹的遍歷器,要求每次可以返回最小的節(jié)點(diǎn)值,我們使用棧。

Binary Search Tree Iterator
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.

1.解題思路

對于二叉搜索樹,我們很容易會想到使用棧和隊(duì)列來解決問題,本題是要求實(shí)現(xiàn)一個(gè)對二叉搜索樹的遍歷器,要求每次可以返回最小的節(jié)點(diǎn)值,我們使用棧。
1)hasnext(),很容易實(shí)現(xiàn),只要判斷棧是否為空;
2)BSTIterator構(gòu)造函數(shù),我們可以從根節(jié)點(diǎn)開始,陸續(xù)將左節(jié)點(diǎn)壓入棧中,這樣迭代器構(gòu)造完后,棧頂元素就是最小的;
3)next(),每次pop出的棧頂元素,該元素肯定不會有左節(jié)點(diǎn),但是我們需要判斷其是否有右節(jié)點(diǎn),如果有,我們要將右節(jié)點(diǎn)壓入棧中,而且還要繼續(xù)將右節(jié)點(diǎn)下面的所有左節(jié)點(diǎn)壓入棧中,這樣才能保證棧頂元素就是最小的。

2.代碼

public class BSTIterator {
    Stack s=new Stack();
    public BSTIterator(TreeNode root) {
        if(root!=null){
            s.push(root);
            pushLeft(root);
        }
    }

    /** @return whether we have a next smallest number */
    public boolean hasNext() {
        return !s.empty();
    }

    /** @return the next smallest number */
    public int next() {
        TreeNode node=s.pop();
        int value=node.val;
        TreeNode rnode=node.right;
        if(rnode!=null){
            s.push(rnode);
            pushLeft(rnode);
        }
        return value;
    }
    private void pushLeft(TreeNode root){
        TreeNode node=root.left;
        while(node!=null){
                s.push(node);
                node=node.left;
            }
    }
}

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/69789.html

相關(guān)文章

  • [Leetcode] Binary Search Tree Iterator 二叉搜素樹迭代器

    摘要:代碼先找到第一個(gè)節(jié)點(diǎn),并把路徑入棧棧為空時(shí)不再有下一個(gè)棧頂是待返回元素如果該元素有右節(jié)點(diǎn),把它的右節(jié)點(diǎn)及右節(jié)點(diǎn)的所有左邊節(jié)點(diǎn)都壓入棧中 Binary Search Tree Iterator 最新更新:https://yanjia.me/zh/2019/02/... Implement an iterator over a binary search tree (BST). Your...

    shixinzhang 評論0 收藏0
  • [LintCode] Binary Search Tree Iterator

    摘要:建立一個(gè)堆棧,先將最左邊的結(jié)點(diǎn)從大到小壓入棧,這樣的話,為了實(shí)現(xiàn)迭代即返回下一個(gè)的函數(shù)就要考慮右邊的結(jié)點(diǎn)。如此,實(shí)現(xiàn)函數(shù)。 Problem Design an iterator over a binary search tree with the following rules: Elements are visited in ascending order (i.e. an in-o...

    silencezwm 評論0 收藏0
  • leetcode98. Validate Binary Search Tree

    摘要:題目要求檢驗(yàn)二叉查找樹是否符合規(guī)則。二叉查找樹是指當(dāng)前節(jié)點(diǎn)左子樹上的值均比其小,右子樹上的值均比起大。因此在這里我們采用棧的方式實(shí)現(xiàn)中序遍歷,通過研究中序遍歷是否遞增來判斷二叉查找樹是否符合規(guī)則。 題目要求 Given a binary tree, determine if it is a valid binary search tree (BST). Assume a BST is...

    codercao 評論0 收藏0
  • leetcode98. Validate Binary Search Tree

    摘要:題目要求檢驗(yàn)二叉查找樹是否符合規(guī)則。二叉查找樹是指當(dāng)前節(jié)點(diǎn)左子樹上的值均比其小,右子樹上的值均比起大。因此在這里我們采用棧的方式實(shí)現(xiàn)中序遍歷,通過研究中序遍歷是否遞增來判斷二叉查找樹是否符合規(guī)則。 題目要求 Given a binary tree, determine if it is a valid binary search tree (BST). Assume a BST is...

    AlphaWatch 評論0 收藏0
  • leetcode98. Validate Binary Search Tree

    摘要:題目要求判斷一個(gè)樹是否是二叉查找樹。二叉查找樹即滿足當(dāng)前節(jié)點(diǎn)左子樹的值均小于當(dāng)前節(jié)點(diǎn)的值,右子樹的值均大于當(dāng)前節(jié)點(diǎn)的值。思路一可以看到,對二叉查找樹的中序遍歷結(jié)果應(yīng)當(dāng)是一個(gè)遞增的數(shù)組。這里我們用堆棧的方式實(shí)現(xiàn)中序遍歷。 題目要求 given a binary tree, determine if it is a valid binary search tree (BST). Assu...

    songze 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<