`
superwind
  • 浏览: 34794 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

二叉排序树求解pku2418

阅读更多

原题链接:http://acm.pku.edu.cn/JudgeOnline/problem?id=2418

解法:二叉排序树存储每一个树种,然后中序遍历输出结果即可

代码(c语言):

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXSIZE 10001
//二叉查找树,中序输出

int root=0;//根索引,0表示NULL
int curr_size=0;//当前树中结点的个数
int num_trees=0;//树的数目
//树节点的定义,下标从1开始,0表示NULL
char key[MAXSIZE][31];
int value[MAXSIZE];
int left_child[MAXSIZE];
int right_child[MAXSIZE];
//查找二叉排序树,如果树为空,返回0,号码已经存在(计数器加1),返回-1,否则返回最后查找的位置
int search(int node, char* k)
{
    int parent=0;
    int current=node;
    while(current!=0)
    {
        parent=current;
        int tmp = strcmp(key[current],k);
        if(tmp == 0)
        {
            value[current]++;
            return -1;
        }else if(tmp<0)
        {
            current = right_child[current];
        }else
        {
            current = left_child[current];
        }
    }
    return parent;
}
//插入新节点
int insert(int node,char* k)
{
    //判断一下插在左子树,还是右子树
    int tmp = strcmp(key[node],k);
    if(tmp==0)
        return 0;
    int new_node = ++curr_size;//分配新位置
    strcpy(key[new_node],k);
    value[new_node]=1;
    left_child[new_node]=0;
    right_child[new_node]=0;
    if(new_node==1)//树为空
        root = 1;
    if(tmp>0)
        left_child[node] = new_node;
    else
        right_child[node] = new_node;
    return 1;
}
void build_tree()
{
    //freopen("in.txt","r",stdin);
    char buf[31];
    while(gets(buf))
    {
        num_trees++;
        int index = search(root,buf);
        if(index>=0)
        {
            insert(index,buf);
        }
    }
}
//中序遍历
void inorder_tree(int root)
{
    if(!root)
        return ;
    inorder_tree(left_child[root]);
    printf("%s %.4f\n",key[root] ,value[root]*100.0/num_trees);
    inorder_tree(right_child[root]);
}

int main()
{
    build_tree();
    inorder_tree(root);
    return 0;
} 
 
分享到:
评论

相关推荐

    二叉排序树的C语言实现

    二叉排序树,又称二叉查找树或二叉搜索树,是一种特殊的二叉树数据结构,它具有以下特性:对于树中的每个节点,其左子树中的所有节点的值都小于该节点的值,而右子树中的所有节点的值都大于该节点的值。这种性质使得...

    pku acm 2418 Hardwood Species代码

    pku acm 2418 Hardwood Species代码,使用二叉查找数(BST),有详细的注释 解题报告请访问:http://blog.csdn.net/china8848

    pku acm 2503 Babelfish代码

    pku acm 2503 Babelfish代码 二叉查找树

    pku acm 2371 Questions and answers代码

    pku acm 2371 Questions and answers代码 采用二叉查找树排序,解题报告请访问:http://blog.csdn.net/china8848

    pku acm 2075 Tangled in Cables 代码

    pku acm 2075 Tangled in Cables 代码 二叉查找树 prim算法,//解题报告请访问:http://blog.csdn.net/china8848

    [PKU] 2418 Hardwood Species

    題目: http://acm.pku.edu.cn/JudgeOnline/problem?id=2418

    pku.zip_PKU

    【标题】"pku.zip_PKU" 指的是一份与北京大学(Peking University, PKU)相关的压缩文件。从描述来看,这份压缩包包含了部分编程题目的代码,可能是学生或者爱好者在解决北京大学编程竞赛或课程作业时编写的。"pku"这...

    PKU-ACM.rar_PKU_acm 题目

    这类问题往往需要参赛者具备扎实的数据结构基础,如链表、树、图,以及对状态转移的理解。 动态规划是解决生命周期题目的常用方法,它通过定义状态和状态转移方程,将大问题分解为小问题求解。在ACM竞赛中,掌握...

    ACM代码 之pku代码

    1. **基础算法**:如排序(快速排序、归并排序、堆排序)、搜索(二分查找、深度优先搜索、广度优先搜索)、图论(Dijkstra、Floyd-Warshall、最小生成树)等。 2. **数据结构**:数组、链表、栈、队列、哈希表、树...

    pku经典题目解题报告

    同时,也会用到数组、链表、栈、队列、树、图等数据结构。 3. **问题分析**:解题报告会详细解释如何理解问题,识别问题的关键要素,以及如何选择合适的算法策略。 4. **代码实现**:报告会展示如何用实际代码实现...

    pku acm 一些代码

    2. **算法**:可能会涉及到排序(如快速排序、归并排序、堆排序)、搜索(如二分查找、深度优先搜索、广度优先搜索)、动态规划、贪心策略、回溯法、分支限界等。 3. **字符串处理**:在ACM中,字符串问题很常见,...

    ACM算法模板和pku代码

    二叉查找树 线段树 RMQ LCA+RMQ SB-Tree 数论 生成紧凑素数表 分解质因子 最大公约数 a^b mod n 扩张欧几里德算法 素数表质因子分解 Stirling公式 中国剩余定理 欧拉数(递推法) 欧拉数(公式法) 十...

    pku1664

    2. **函数**:可能有一个或多个函数定义,用于执行特定任务,如输入处理、问题求解逻辑、结果输出等。 3. **输入与输出**:C++中的输入输出操作通常通过`cin`和`cout`进行。程序员可能会使用这些流对象来读取用户...

    pku1000程序 解题报告

    pku1000 pku1000程序 解题报告

    src.rar_ Binary search java_KMP_PKU_java pku_并查集算法

    二叉查找树(Binary Search Tree)是一种自平衡的二分查找树,提供了快速的插入、删除和查找操作;动态规划(Dynamic Programming)是解决最优化问题的一种方法,通过将问题分解为相互重叠的子问题来求解;匈牙利...

    acm_pku_code.zip_Code p_acm pku_acm pku pu_acm.pku_pku acm

    2. 算法:排序(快速排序、归并排序、堆排序等)、搜索(深度优先搜索、广度优先搜索、A*搜索等)、动态规划、贪心算法、回溯法、分治策略等。 3. 数论:素数、模运算、最大公约数和最小公倍数、同余方程等。 4. ...

    用于人体动作识别的PKU-MMD大范围数据集

    benchmark (PKU-MMD) for continuous multi-modality 3D human action understanding and cover a wide range of complex human activities with well annotated information. PKU-MMD contains 1076 long video ...

    pku_ACM.rar_PKU_PKU_ACM

    字符串处理通常包括查找、替换、排序等操作,而动态规划则是一种解决最优化问题的有效方法,通过构建状态转移方程,将原问题分解为子问题,逐步求解。 2. **1006.cpp**:这道题目的解决可能运用了图论和搜索算法。...

    Pku的oj题目分类.

    - **定义**:排序算法用于将一组无序的数据按照某种规则进行排列,常见的排序算法包括冒泡排序、选择排序、插入排序、快速排序等。 - **示例题目**:如题目1423、1694等。 #### 其他 - **历法**:涉及到日期计算的...

    PKU1639解题报告

    ### PKU1639 解题报告:度限制生成树 #### 题目概述 题目名称为“Picnic Planning”,来源于East Central North America 2000年比赛。题目实质上是在寻找多个字符串(代表不同生命体的DNA序列)中最长的公共子串,...

Global site tag (gtag.js) - Google Analytics