【leetcode系列】【算法】【简单】修剪二叉搜索树(迭代)

题目:

题目链接: https://leetcode-cn.com/problems/trim-a-binary-search-tree/

解题思路:

比较就好,用递归代码应该是最少的

但是应某些人的要求,尝试用迭代的方法实现了一下

可能不是最好的迭代的方法,欢迎讨论

代码实现:

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution:
    def trimBST(self, root: TreeNode, L: int, R: int) -> TreeNode:
        while root:
            if root.val < L:
                root = root.right
            elif root.val > R:
                root = root.left
            else:
                break

        if not root:
            return None

        stack = [root]
        while stack:
            node = stack[-1]
            stack.pop()
            children = [node.left, node.right]

            while node.left :
                if node.left.val < L:
                    node.left = node.left.right
                elif node.left.val > R:
                    node.left = node.left.left
                else:
                    stack.append(node.left)
                    break

            while node.right :
                if node.right.val < L:
                    node.right = node.right.right
                elif node.right.val > R:
                    node.right = node.right.left
                else:
                    stack.append(node.right)
                    break

        return root
发布了138 篇原创文章 · 获赞 13 · 访问量 2444

猜你喜欢

转载自blog.csdn.net/songyuwen0808/article/details/105723351