• 二叉搜索树迭代器


    173. 二叉搜索树迭代器
    分别结合 队列 两种数据结构实现。

    
    class BSTIterator:
        """
        结合栈
        173. 二叉搜索树迭代器
        https://leetcode.cn/problems/binary-search-tree-iterator/description/?show=1
        """
    
        def __init__(self, root: Optional[TreeNode]):
            self.stk = []
            self.pushleftBranch(root)
    
        # 左侧树枝一撸到底
        def pushleftBranch(self, p):
            while p:
                self.stk.append(p)
                p = p.left
    
        def next(self) -> int:
            p = self.stk.pop()
            self.pushleftBranch(p.right)
            return p.val
    
        def hasNext(self) -> bool:
            return len(self.stk) > 0
    
        def peek(self) -> bool:
            return self.stk[-1].val
    
    
    class BSTIterator1:
        """
        结合队列
        173. 二叉搜索树迭代器
        https://leetcode.cn/problems/binary-search-tree-iterator/description/?show=1
        """
        def __init__(self, root: Optional[TreeNode]):
            self.deque = collections.deque()
            self.inOrder(root)
    
        def inOrder(self, root):
            """
            二叉树中序遍历
            :param root:
            :return:
            """
            if not root:
                return
            self.inOrder(root.left)
            self.deque.append(root.value)
            self.inOrder(root.right)
    
        def next(self) -> int:
            val = self.deque.popleft()
            return val
    
        def hasNext(self) -> bool:
            return len(self.deque) > 0
    
        def peek(self) -> bool:
            return self.deque[0]
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62

    BST迭代器应用

    1305. 两棵二叉搜索树中的所有元素

    # Definition for a binary tree node.
    # class TreeNode:
    #     def __init__(self, val=0, left=None, right=None):
    #         self.val = val
    #         self.left = left
    #         self.right = right
    class Solution:
    	"""
    	1305. 两棵二叉搜索树中的所有元素
    	"""
        def getAllElements(self, root1: TreeNode, root2: TreeNode) -> List[int]:
            t1 = BSTIterator(root1)
            t2 = BSTIterator(root2)
    
            res = []
            
            while t1.hasNext() and t2.hasNext():
                if t1.peek() > t2.peek():
                    res.append(t2.next())
                else:
                    res.append(t1.next())
    
            while t1.hasNext():
                res.append(t1.next())
            
            while t2.hasNext():
                res.append(t2.next())
            
            return res
    
    
    
    class BSTIterator:
        """
        结合队列
        173. 二叉搜索树迭代器
        https://leetcode.cn/problems/binary-search-tree-iterator/description/?show=1
        """
        def __init__(self, root: Optional[TreeNode]):
            self.deque = collections.deque()
            self.inOrder(root)
    
        def inOrder(self, root):
            """
            二叉树中序遍历
            :param root:
            :return:
            """
            if not root:
                return
            self.inOrder(root.left)
            self.deque.append(root.val)
            self.inOrder(root.right)
    
        def next(self) -> int:
            val = self.deque.popleft()
            return val
    
        def hasNext(self) -> bool:
            return len(self.deque) > 0
    
        def peek(self) -> bool:
            return self.deque[0]
            
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
  • 相关阅读:
    MYSQL 索引下推 45讲
    原来你是这样的JAVA--[07]聊聊Integer和BigDecimal
    Kafka - 15 Kafka Offset | 自动和手动提交Offset | 指定Offset消费 | 漏消费和重复消费 | 消息积压
    小米发布会:雷军成长故事与创新壮举,AI大模型技术引领未来,雷军探索之路之从创业波折到小米AI领航,成就高端化传奇!
    CMake日志与变量操作
    C#里实现简单的异步TCP服务器
    2023-09-16 CSP-J 第一轮初赛真题解析
    C编程入门到精通 专辑目录
    rust学习Cell、RefCell、OnceCell
    热烈庆祝瑞森半导体成立10周年
  • 原文地址:https://blog.csdn.net/qq_32275289/article/details/133417917