需要首先明确二叉搜索树(Binary Search Tree)的概念:(也称之为二叉排序树Binary Sort Tree)
若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;
若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;
它的左、右子树也分别为二叉搜索树
没有相等键值的结点存在
明确了概念后,就很容易知道,中序遍历二叉排序树,得到的是一个升序数组。
这样子只需要将其中序遍历后,找出数组相邻元素差值中最小的差值即为答案。
可以先遍历完再找最小差值,但为了提高效率,这里采用边遍历边记录最小值的方式:
正式解题
- 利用pre 记录前驱结点的值
- 利用ans 记录最小的差值
- 每次读取新结点值时,都令当前结点与前驱结点的差值,与当前已记录的最小差值作比较。 更新ans
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(