题目:
题目链接: 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