zoukankan      html  css  js  c++  java
  • 二叉排序树的建立

    设计一个算法,读入一整串整数构成一棵二叉排序树并进行查找。

    测试数据:60 35 69 84 96 13 66 34 21 0

    输出:13 21 34 35 60 66 69 84 96

    输入查找数据:40

    输出:13 21 34 35 60 66 69 84 96

    算法思想:二叉排序树的构成,从空的二叉树开始,每次输入一个结点数据,就建立一个新结点插入到当前已生成的二叉排序树中,所以它的主要操作是二叉排序树的插入运算。在二叉排序树插入新的结点,只要保证插入后仍符合二叉排序树的定义即可。二叉排序树的查找过程:当二叉排序树非空时,首先将给定值与根结点比较,若相等,则查找成功,若小于根结点,则在左子树继续查找,若大于根结点的值,则在右子树上继续查找。

    代码:

    (1)中序遍历二叉树算法 inorder  (2)二叉排序树的插入算法 inserbst  (3)生成二叉排序树算法 creatord  (4)主函数

    #include <iostream>
    #include <stdio.h>
    #include<malloc.h>
    using namespace std;
    typedef struct node
    {
        int key;
        struct node *lchild, *rchild;
    }bstnode;
    
    void inorder(bstnode *t)
    {
        if(t!=NULL)
        {
            inorder(t->lchild);
            printf("%4d",t->key);
            inorder(t->rchild);
        }//中序查找
    }
    bstnode * insertbst(bstnode *t,int k)
    {
        bstnode *p;
        if(t==NULL)
        {
            p=(bstnode *)malloc(sizeof(bstnode));
            p->key=k;
            p->lchild=NULL;
            p->rchild=NULL;
            return (p);
        }
        else if(t->key==k) return(t);
        else if(t->key>k){t->lchild=insertbst(t->lchild,k);return (t);}
        else{t->rchild=insertbst(t->rchild,k);return(t);}
    }
    bstnode *creatord(){
    bstnode *t;
    int key;
    t=NULL;
    scanf("%d",&key);
    while(key!=0)
        {
            t=insertbst(t,key);
            scanf("%d",&key);}
            return (t);
    
    }
    int main()
    {
        //cout << "Hello world!" << endl;
        int key;
        bstnode * root;
        root=creatord();
        inorder(root);
        printf("
     input search key:");
        scanf("%d",&key);
        insertbst(root,key);
        inorder(root);
        printf("
    ");
    
        return 0;
    }

    malloc函数为动态分配空间;
    原型为: void * malloc(int size);

    使用方法一般为:
    假设你定义了一个名为Node的struct类型,你要定义一个名为a的Node类型的指针变量,使用以下语句:
    Node * a=(Node *)malloc(sizeof(Node));
    其中(Node *)为强制转换,把返回类型void *转换为Node *,sizeof(Node)为获取Node类型占据空间的大小,如在我机子上int类型占4字节,sizeof(int)就返回4;
    使用malloc需要包含#include <malloc.h>

  • 相关阅读:
    好消息,不用替换文件,凯立德能用了
    开心网外挂开发之 XML序列化于反序列化
    开心网外挂开发之 Singleton 单件模式应用
    开心网外挂开发之 开篇
    新买的雷柏1800无线套装
    新年好!!!!!!!!!!!!!!!!!!!!!!!
    恩,我还在写代码
    VS2019安装MSDN离线文档
    xaf使用非持久化类(nonpersistent)来展示lookuplist和展示树结构
    My Record Series: (1.2) Windows Phone 7 Launchers and Choosers
  • 原文地址:https://www.cnblogs.com/lqs-zsjky/p/4452243.html
Copyright © 2011-2022 走看看