码迷,mamicode.com
首页 > 其他好文 > 详细

【TOJ 1003】

时间:2018-05-07 21:00:27      阅读:161      评论:0      收藏:0      [点我收藏+]

标签:它的   struct   需要   otto   二叉排序树   数字   mini   过程   分代   

描述

给定一棵二叉搜索树(Binary Search Tree,BST),求其两结点元素之差的最小绝对值。

BST定义:

二叉搜索树,又称为二叉排序树,它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。

二叉树节点定义如下:

struct TreeNode {

    int val;

    struct TreeNode *left;

    struct TreeNode *right;

};

题目部分代码已经完成,您只需要补充并提交以下函数:

int getMinimumDifference(struct TreeNode* root);

二叉搜索树图例:技术分享图片

输入

输入第一行为整数n,表示关键字数目(n<500)。

第二行有n个整数,表示节点的关键字,按照该关键字顺序构建一棵BST。

输出

输出两结点元素之差的最小绝对值。

样例输入

3
1 3 2

样例输出

1

题解

BST使用中序遍历得到升序排序,而最小的绝对差肯定是发生在两个相邻数字,所以只要遍历过程相减并且对比最小值即可。

#include<bits/stdc++.h>
using namespace std;
struct TreeNode {
    int val;
    struct TreeNode *left;
    struct TreeNode *right;
};
void Insert(TreeNode**root,TreeNode*t)
{
    if(*root==NULL)
        *root=t;
    else if(t->val < (*root)->val)
        Insert(&(*root)->left,t);
    else Insert(&(*root)->right,t);
}
TreeNode*creatBst()
{
    TreeNode*root=NULL,*t;
    int x,i,n;
    scanf("%d",&n);
    for(i=1;i<=n;i++)
    {
        scanf("%d",&x);
        t=(TreeNode*)malloc(sizeof(TreeNode));
        t->val=x;
        t->left=NULL;
        t->right=NULL;
        Insert(&root,t);
    }
    return root;
}
int m[505],s;
void insave(struct TreeNode*root)
{
    if(!root)
        return;
    insave(root->left);
    m[s++]=root->val;
    insave(root->right);
}
int getMinimumDifference(struct TreeNode* root)
{
    int i;
    if(!root)
        return 0;
    insave(root);
    int minn=99999999;
    for(i=1;i<s;i++)
    {
        if(abs(m[i-1]-m[i])<minn)
            minn=abs(m[i-1]-m[i]);
    }
    return minn;
}
int main()
{
    TreeNode*t=creatBst();
    printf("%d\n",getMinimumDifference(t));
    return 0;
}

【TOJ 1003】

标签:它的   struct   需要   otto   二叉排序树   数字   mini   过程   分代   

原文地址:https://www.cnblogs.com/kannyi/p/9004681.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!