`
zjjzmw1
  • 浏览: 1366334 次
  • 性别: Icon_minigender_1
  • 来自: 开封
社区版块
存档分类
最新评论

二叉树的思路,查找1000个成语中的某一个成语。

c 
阅读更多




#include<stdio.h>
#define MAX1 8800000 //准备查找成语文件的大小。
//把成语转换为二进制形式。
void toBinary(char *c,char *binaryArray) {
    char ch[9] = {'\0'};
    int k = 0;
    int i;
    int j = 0;
    while ('\0' != c[j])//一个字一个字的循环。
    {
        if (c[j] != ',') {//当没有遇见逗号的时候。
            for (i = 7;i >= 0;i--)
            {
                ch[i] = (c[j]&1)+'0';
                c[j]>>=1;
            }
            for (int kk = 0; kk<=7; ++kk) {
                binaryArray[k] = ch[kk];
                k++;
            }
        }else {
            binaryArray[k] = ',';
            k++;
        }
        j++;
    }
}
//定义自己的二叉树。
typedef struct Node
{
    char data;
    struct Node * left;
    struct Node * right;
}Node;
//把二进制生成树的方法。

Node *binaryToTree(char res[]){
    Node * p = NULL;
    p = (Node *)malloc(sizeof(Node));
    p->data = ' ';//二叉树的跟没有值。
    int flag = 0;
    Node * tempP = p;
    tempP->left = NULL;
    tempP->right = NULL;
    while (res[flag]!='\0') {
        if (res[flag]!=',') {
            if ((res[flag]=='0')&&(tempP->left==NULL)) {
                Node * p1 = (Node *)malloc(sizeof(Node));
                p1->left = NULL;
                p1->right = NULL;
                p1->data = res[flag];
                tempP->left=p1;
                tempP = p1;
            }else if ((res[flag]=='1')&&(tempP->right==NULL)){
                Node * p2 = (Node *)malloc(sizeof(Node));
                p2->left = NULL;
                p2->right = NULL;
                p2->data = res[flag];
                tempP->right=p2;
                tempP = p2;
            }else{
                tempP = res[flag]=='0'?tempP->left:tempP->right;
            }
        }else{
            tempP = p;
        }
        flag++;
    }
    return p;
}

int isInTree(Node *p,char c[]){
    Node * tempP = p;
    int result = 1;
    for (int i=0; i<96; ++i) {
        if ((tempP->left!=NULL)&&(c[i]==tempP->left->data)) {
            tempP = tempP->left;
        }else if((tempP->right!=NULL)&&(c[i]==tempP->right->data)){
            tempP = tempP->right;
        }else{
            result = 0;
        }
    }
    return result;
}





void outputBinaryTree_pre(Node * head)
{
    if(head)
    {
        printf("%c", head->data);
        outputBinaryTree_pre(head->left);
        outputBinaryTree_pre(head->right);
    }
}


int main()
{
    FILE *fp;
    char name[97] = "张明漂亮";//要查找的内容。
    //小的时候用栈完全可以,大的时候,必须用堆。
    char *filename = malloc(MAX1);//文件存放的内容。96*80000
    memset(filename,0,MAX1);//初始化为0,没有必要。
    char *bijiao = malloc(MAX1);
    memset(bijiao,0,MAX1);
    toBinary(name, bijiao);//把要找的内容转换为二进制。
    NSLog(@"bijiao===%s==",bijiao);
    if((fp=fopen("/Users/zhangmingwei/Desktop/33.txt","r"))==NULL) //以读写方式打开
    {
        printf("Can not open file\n");
        return 0;
    }
    fgets(filename, MAX1, fp);//读取文件内容。
    char *res = malloc(MAX1);
    //res 就是一会需要比较的那个包含10万个二进制的成语的字符数组了。
    toBinary(filename, res);//把文件内容转换为二进制。用第二种方法来判断。
    //现在只需要查找,看bijiao 是否在res 中就行了。res 中的数据是以逗号分割的。
//    printf("\nres===%s\n",res);
   
    Node *p = NULL;
    p = (Node *)malloc(sizeof(Node));
    p = binaryToTree(res);
    printf("\n============\n");
    outputBinaryTree_pre(p);
    printf("\n============\n");
    if (isInTree(p, bijiao)) {
        printf("\n成功了\n");
    }else{
        printf("\n失败了\n");
    }
   
   
    fclose(fp);
    free(filename);
    free(bijiao);
    free(res);
    return 0;
}


1
0
分享到:
评论

相关推荐

    数据结构二叉树查找方式

    * 创建二叉树:创建一个新的二叉树。 * 遍历二叉树:对二叉树进行遍历操作。 * 查找二叉树:在二叉树中查找指定元素。 * 插入二叉树:在二叉树中插入新元素。 * 删除二叉树:从二叉树中删除指定元素。 六、二叉树的...

    二叉树 平衡二叉树 平均查找长度

    平均查找长度(Average Search Length, ASL)是指在一个数据结构中寻找特定元素所需的平均比较次数。对于二叉搜索树,ASL的计算依赖于树的形状,特别是其深度和节点分布。理想情况下,一个平衡的二叉搜索树的ASL接近...

    JAVA实现读取TXT文件并建立平衡二叉树及查找功能

    在本文中,我们将深入探讨如何使用Java编程语言从TXT文件中读取数据,构建一个平衡二叉树(例如AVL树或红黑树),并实现查找功能以及打印节点的访问路径。首先,让我们理解每个部分的基本概念。 1. **TXT文件读取**...

    随机数二叉树,查找输入值

    随机数二叉树的构建过程通常从一个根节点开始,然后随机生成一个数值并将其作为新节点插入到合适的位置,以保持二叉搜索树的性质。这个过程会持续进行,直到达到预设的节点数量或者满足特定条件。由于每个节点的值都...

    用C++实现二叉树的查找功能

    二叉树是由n(n≥0)个有限节点组成一个具有层次关系的集合。每个节点包含一个值,并最多有两个子节点,分别称为左子节点和右子节点。二叉树通常用来表示一对多的关系,例如文件系统、目录结构等。 在C++中,我们...

    数据结构C语言版二叉树及其查找结构

    二叉树也是递归定义的,其结点有左右子树之分,逻辑上二叉树有五种基本形态:空二叉树、只有一个根结点的二叉树、右子树为空的二叉树、左子树为空的二叉树和完全二叉树。 二叉树的性质 二叉树有许多重要的性质,如...

    建立二叉树先中后序查找

    本篇文章将基于给定的代码片段,深入解析如何构建一个二叉树,并通过先序、中序、后序遍历的方法来查找树中的元素。 ### 构建二叉树 二叉树由节点构成,每个节点包含一个数据部分(`data`)以及指向其左子树和右子...

    二叉树建立和查找 数据结构

    理解并熟练掌握二叉树的建立和查找操作对于深入学习数据结构和算法至关重要,这将有助于提升你在编程项目和面试中的竞争力。通过实践这些基本操作,你可以进一步探索更高级的主题,如平衡二叉树(AVL树、红黑树)、...

    数据结构 二叉树的查找

    数据结构 二叉树的查找 代码实现过,运行没有问题

    输出二叉树中某结点的双亲结点

    采用先序法建立一棵二叉树,设计输出某结点数据为x的双亲结点的数据的程序,二叉树的数据域类型为字符型, 扩展二叉树的叶子结点用‘#’表示,要求可以求一棵二叉树中多个结点的双亲。

    C++实现异质二叉树的查找、插入、删除和遍历操作

    这可以通过重载`find()`方法来实现,或者在基类中定义一个通用的查找方法,然后在派生类中提供特定类型的实现。 5. **插入操作**: 插入操作涉及到创建新节点并将其插入到适当位置。首先,我们需要检查插入值的...

    数据结构实验 二叉树遍历与路径查找

    在IT领域,数据结构是计算机科学的基础,而二叉树作为一种重要的数据结构,广泛应用于算法设计和问题解决中。本实验“数据结构实验:二叉树遍历与路径查找”着重探讨了如何用C/C++语言实现二叉树的遍历和路径查找...

    二叉树的基本操作,遍历 查找 数据结构

    在这个实验中,我们关注的是二叉树的基本操作,包括建立、遍历、查找节点数量以及计算树的深度。 首先,我们来详细解释二叉树的结构。二叉树的节点包含数据和两个指向子节点的指针。在C++中,我们可以用结构体来...

    二叉树的查找

    二叉树查找,前序遍历,中序遍历,后序遍历。树的查找。

    前序遍历中序遍历生成二叉树并查找节点

    设二叉树结点值为大写字母,输入二叉树的前序遍历和中序遍历序列,生成此二叉树,输出该二叉树的后序遍历和按...输入某结点值,在二叉树中查找该结点,若该结点存在,则输出从根到该结点的路径,否则给出不存在信息。

    java二叉树查找

    二叉查找树(Binary Search Tree,BST)是二叉树的一个特例,它遵循以下规则:对于任意节点,其左子树中的所有节点值都小于该节点值,而右子树中的所有节点值都大于该节点值。这个特性使得二叉查找树在搜索、插入和...

    《数据结构》二叉树建立、前中后序遍历、及节点查找

    二叉树是计算机科学中数据结构的一个重要概念,它在许多算法和应用中都有广泛的应用。本主题将深入探讨二叉树的建立、三种遍历方法(前序、中序和后序)以及节点查找的基本原理和实现。 一、二叉树的建立 二叉树是...

    erchashu.txt.rar_二叉树的 查找

    在二叉树中查找一个元素,通常从根节点开始,根据节点值与目标值的比较来决定是向左子树还是向右子树递归查找。这个过程可以总结为以下步骤: 1. 如果目标值等于当前节点的值,则查找成功。 2. 如果目标值小于当前...

    数据结构(栈、队列、二叉树、顺序查找、二分查找、图的遍历等)

    DFS从一个顶点出发,尽可能深地搜索分支;BFS则从起点开始,一层一层地搜索所有相邻节点。图遍历广泛应用于网络路由、社交网络分析等领域。 以上知识都是C语言数据结构的基础,熟练掌握它们对于编程和算法设计至关...

    二叉树的查找和删除.zip

    二叉树是一种特殊的树结构,每个节点最多有两个子节点,通常分为左子节点和右子节点。在IT领域,二叉树广泛应用于数据存储、搜索算法、文件系统和编译器设计等多个方面。本资料主要关注二叉树的查找和删除操作,这是...

Global site tag (gtag.js) - Google Analytics