leetcode 783. Minimum Distance Between BST Nodes 以及同样的题目 530. Minimum Absolute Difference in BST
2024-08-30 20:04:06
Given a Binary Search Tree (BST) with the root node root
, return the minimum difference between the values of any two different nodes in the tree.
Example :
Input: root = [4,2,6,1,3,null,null]
Output: 1
Explanation:
Note that root is a TreeNode object, not an array. The given tree [4,2,6,1,3,null,null] is represented by the following diagram: 4
/ \
2 6
/ \
1 3 while the minimum difference in this tree is 1, it occurs between node 1 and node 2, also between node 3 and node 2.
Note:
- The size of the BST will be between 2 and
100
. - The BST is always valid, each node's value is an integer, and each node's value is different.
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None class Solution(object):
def minDiffInBST(self, root):
"""
:type root: TreeNode
:rtype: int
"""
# traverse node from min to max
self.last_node = None
self.min_diff = float('inf') def dfs(node):
if not node: return
dfs(node.left)
if self.last_node:
self.min_diff = min(self.min_diff, node.val-self.last_node.val)
self.last_node = node
dfs(node.right) dfs(root)
return self.min_diff
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None class Solution(object):
def minDiffInBST(self, root):
"""
:type root: TreeNode
:rtype: int
"""
# traverse node from min to max
last_node = None
ans = float("inf")
node = root
stack = []
while node:
stack.append(node)
node = node.left
while stack:
node = stack.pop()
if last_node:
ans = min(ans, node.val-last_node.val)
last_node = node
node = node.right
while node:
stack.append(node)
node = node.left
return ans
Morris Traversal:
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None class Solution(object):
def minDiffInBST(self, root):
"""
:type root: TreeNode
:rtype: int
"""
# traverse node from min to max
last_node = None
ans = float("inf") cur = root
while cur:
if cur.left is None:
if last_node:
ans = min(ans, cur.val-last_node.val)
last_node = cur
cur = cur.right
else:
tmp = cur.left
while tmp.right and not (tmp.right is cur):
tmp = tmp.right
if not tmp.right:
tmp.right = cur
cur = cur.left
else:
tmp.right = None
if last_node:
ans = min(ans, cur.val-last_node.val)
last_node = cur
cur = cur.right
return ans
最新文章
- 3.2 一般的哈尔空间Vj
- SBCL 从REPL 中提取lisp代码
- 『TCP/IP详解——卷一:协议』读书笔记——17
- Apache Qpid Python 1.35.0 发布
- Netty那点事
- Linux进程管理知识整理
- Android JNI之调用JAVA方法的返回类型签名
- 第一章、关于SQL Server数据库的备份和还原(sp_addumpdevice、backup、Restore)
- Android开发周报:Android L默认加密用户数据
- firefox os 该设备呼叫移动开发
- [Splay模版1]
- struts2对于处理JSON的配置
- CROSS JOIN,NATURAL JOIN
- 求你显示pdf
- [AHOI2017/HNOI2017]大佬
- 用SoapUI 测试Web Service
- 无界面运行Jmeter压测脚本 --后知者
- sqoop快速入门
- 字符集(编码)转换_Windows
- WPF 自定义属性
热门文章
- xtu summer individual 1 C - Design the city
- 什么是Etcd?
- [HDU4348]To the moon(主席树)
- Uva10294 Arif in Dhaka (置换问题)
- [转]Android SDK下载和更新失败的解决方法
- k/3cloud表格控件块粘贴代码逻辑
- [NOIP2003] 提高组 洛谷P1039 侦探推理
- BZOJ4580: [Usaco2016 Open]248
- nginx 安装过程中的not found
- 11-Js类和对象