每日力扣算法题(简单篇)

发布时间:2024年01月04日

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;
}

文章来源:https://blog.csdn.net/2301_79629995/article/details/135383278
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。