Java 求解二叉搜索树的最小绝对差
Posted 南淮北安
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 求解二叉搜索树的最小绝对差相关的知识,希望对你有一定的参考价值。
一、题目
给你一棵所有节点为非负值的二叉搜索树,请你计算树中任意两节点的差的绝对值的最小值。
二、题解
该题类似:验证二叉搜索树
已知是一颗二叉搜索树,所以最小值一定出现在相邻的节点
即对这棵树中序遍历即可,遍历过程中找出相邻结点的最小差值
三、递归法
中序遍历,求相邻结点的最小差值,所以需要记录前驱节点
class Solution
//记录遍历过程中的最小差值
int min = Integer.MAX_VALUE;
//记录遍历过程中的前驱节点
TreeNode pre;
public int getMinimumDifference(TreeNode root)
if (root == null)
return min;
getMinimumDifference(root.left);
//遍历过程迭代更新最小差值
if (pre != null && (root.val - pre.val) < min)
min = root.val - pre.val;
pre = root;
getMinimumDifference(root.right);
return min;
四、迭代法
中序遍历,借助前驱
class Solution
public int getMinimumDifference(TreeNode root)
Deque<TreeNode> deque = new LinkedList<>();
int min = Integer.MAX_VALUE;
TreeNode pre = null;
while (root != null || !deque.isEmpty())
if (root != null)
deque.push(root);
root = root.left;
else
root = deque.pop();
if (pre != null && (root.val - pre.val) < min)
min = root.val - pre.val;
pre = root;
root = root.right;
return min;
五、总结
该题,本质还是考察二叉搜索树的性质,及二叉树的中序遍历
以上是关于Java 求解二叉搜索树的最小绝对差的主要内容,如果未能解决你的问题,请参考以下文章