题目描述:
解题思路:
简单题,一般都不需要绕什么弯,第一种很傻的思路,就是遍历所有节点,存起来,然后找最小的差,利用搜索二叉树的性质,中序遍历后得到的是一个升序的序列,这道题的答案一定是某两个相邻的节点差。(节点排好序后)
所有我们可以用一个变量存储前一个节点的值,这样直接省去了开辟新的空间。
参考代码:
//笨比做法
public int getMinimumDifference(TreeNode root) {
List<Integer> rootval=new ArrayList<>();
getval(root,rootval);
int max=Integer.MAX_VALUE;
int temp;
for (int i = 0; i < rootval.size()-1; i++) {
temp = rootval.get(i+1)-rootval.get(i);
max=Math.min(max,temp);
}
return max;
}
private void getval(TreeNode root,List<Integer> rootval){
if(root==null)
{
return;
}
getval(root.left,rootval);
rootval.add(root.val);
getval(root.right,rootval);
}
//#######################################
int max;
int pre;
public int getMinimumDifference2(TreeNode root) {
pre=-1;
max=Integer.MAX_VALUE;
dfs(root);
return max;
}
private void dfs(TreeNode root) {
if(root==null)
{
return;
}
dfs(root.left);
if(pre==-1)
{
pre=root.val;
}
else
{
max=Math.min(max,root.val-pre);
pre=root.val;
}
dfs(root.right);
}