530.二叉搜索树的最小绝对差
原题:
给你一个二叉搜索树的根节点?root
?,返回?树中任意两不同节点值之间的最小差值?。
差值是一个正数,其数值等于两值之差的绝对值。
解题思路:
求取最小的绝对差,首先先知道什么是二叉搜索树,二叉搜索树可以理解为,将树中的数据中序遍历并放到数组中后数据时有序的一种树,而中序遍历则是先遍历左节点再遍历右节点的一种遍历方式,顺着如下思路我们便可以先采用递归的方式遍历二叉树并保存数据,而后再逐一求差,得到最小绝对差,而这里的递归思路可以这样理解,假设一棵有四个节点的二叉搜索树:
先向左递下去,当发现传入的指针为NULL归上来,当遍历到节点1时,发现左右节点均为空,将1放入数组,归上去,到2节点,将2 存入数组,遍历右子树,发现为空,返回,再返回4中,先将4 存入数组中,再遍历右子树,再将6存入数组中,发现左右都为空,函数结束。
于是我们便有如下代码
源代码:
void go(int *stack,struct TreeNode* root,int *top)
{
if(root==NULL)
{
return ;
}else
{
go(stack,root->left,top);
stack[(*top)++]=root->val;
go(stack,root->right,top);
}
}
int getMinimumDifference(struct TreeNode* root) {
int top=0,*stack=malloc(sizeof(int)*10001);
go(stack,root,&top);
int min=1000000000;
for(int i=0;i<top-1;i++)
{
if(fabs(stack[i]-stack[i+1])<min)
{
min=fabs(stack[i]-stack[i+1]);
}
if(min==0)
{
break;
}
}
return min;
}