每日leetcode4.13-二叉搜索树
783. 二叉搜索树节点最小距离(简单)
本题我的方法是利用二叉排序树的特点,左子树的最大值为左子树的最右节点,右子树的最小节点为右子树的最左节点
class Solution:
def minDiffInBST(self, root: TreeNode) -> int:
if root == None:
return 0xffff
l = self.minDiffInBST(root.left)
r = self.minDiffInBST(root.right)
lnode = root.left
lval = 0xffff
if lnode:
while lnode.right:
lnode = lnode.right
lval = root.val - lnode.val
rnode = root.right
rval = 0xffff
if rnode:
while rnode.left:
rnode = rnode.left
rval = rnode.val - root.val
return min(lval, rval, l, r)
题解有方法中序遍历,不明白为什么这种方法的执行用时反而比我上面那个方法长
class Solution:
pre = -0xffff
ans = 0xffff
def minDiffInBST(self, root: TreeNode) -> int:
def inorder(x: TreeNode):
if x:
inorder(x.left)
self.ans = min(self.ans, x.val - self.pre)
self.pre = x.val
inorder(x.right)
inorder(root)
return self.ans
701. 二叉搜索树中的插入操作
常规操作
class Solution:
def insertIntoBST(self, root: TreeNode, val: int) -> TreeNode:
if root == None:
return TreeNode(val)
x = root
while x:
if x.val > val:
if x.left:
x = x.left
else:
x.left = TreeNode(val)
else:
if x.right:
x = x.right
else:
x.right = TreeNode(val)
return root