| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2155 人关注过本帖
标题:输入任意10个数字,按照左子树一定比右子树小的规则构建二叉树。 同时,任意 ...
只看楼主 加入收藏
GCJDZ
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2017-3-18
结帖率:0
收藏
 问题点数:0 回复次数:2 
输入任意10个数字,按照左子树一定比右子树小的规则构建二叉树。 同时,任意输入这10个数字中的任意一个数字,将遍历查找的数字顺序输出到屏幕上。*/
输入任意10个数字,按照左子树一定比右子树小的规则构建二叉树。
同时,任意输入这10个数字中的任意一个数字,将遍历查找的数字顺序输出到屏幕上。*/
搜索更多相关主题的帖子: 二叉树 
2017-03-19 22:26
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
还没有人回么~也好~九九最近在学习二叉树~看来还得九九抽时间来敲敲看~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-03-20 18:15
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
试试效果如何~
程序代码:
#include<stdio.h>
#include<stdlib.h>

#define LEN sizeof (Tree)

typedef struct Tree
{
    int n;
    struct Tree* left;
    struct Tree* right;
}Tree,*PTree;

void Init(int** a,int* n);         //初始化信息                        

void InsertTree(PTree* p,int n);   //创建二叉搜索树
void NewNode(PTree* p,int n);      //插入一个新的节点
void In_Order_Traversal(PTree p);  //中序遍历节点
PTree Find_Node(PTree p,int n);     // 查找结点

void DestroyTree(PTree p);          //释放节点

int main()
{
    PTree t=NULL;
    PTree t_find=NULL;
    int *a=NULL;
    int n=0;
    int e=0;
    int i=0;

    Init(&a,&n);

    for (i=0;i<n;++i)
        InsertTree(&t,a[i]);

    puts("二叉搜索树中序遍历打印的结果为:");

    In_Order_Traversal(t);
    puts("");

    printf("请输入要查找的数据:");
    scanf("%d",&e);

    if ((t_find=Find_Node(t,e))!=NULL)
        puts("\n找到该数据");
    else
        puts("\n找不到该数据!");

    DestroyTree(t);
        
    return 0;

}

void Init(int** a,int* n)
{
    int i=0;

    printf("请输入数据个数:");
    scanf("%d",n);

    if ((*a=(int*)malloc(*n*sizeof(int)))==NULL)
    {
        puts("分配空间失败!");
        exit(0);
    }

    printf("请输入%d个数据:\n",*n);
    for (i=0;i<*n;++i)
        scanf("%d",*a+i); 
    printf("请输入");
}

void InsertTree(PTree* p,int n)    //创建二叉搜索树
{
    if (*p==NULL)  
    {
        NewNode(p,n);
        return ;
    }

    if (n<(*p)->n)
        InsertTree(&((*p)->left),n);
    else if (n>(*p)->n)
        InsertTree(&(*p)->right,n);
}

void NewNode(PTree* p,int n)      //插入一个新的节点
{
    *p=(PTree)malloc(LEN);

    if (*p!=NULL)
    {
        (*p)->n=n;
        (*p)->left=NULL;
        (*p)->right=NULL;
    }
}

void In_Order_Traversal(PTree p)  //中序遍历节点
{
    if (p==NULL)
        return ;

    In_Order_Traversal(p->left);
    
    printf("%d ",p->n);

    In_Order_Traversal(p->right);
}

PTree Find_Node(PTree p,int n)
{
    if (p==NULL)
        return p;

    if (n<p->n)
    {
        printf("%d ",p->n);
        p=Find_Node(p->left,n);
    }
    else if (n>p->n)
    {
        printf("%d ",p->n);
        p=Find_Node(p->right,n);
    }
    else
        printf("%d ",p->n);

    return p;
}

void DestroyTree(PTree p)
{
    if (p==NULL)
        return ;

    DestroyTree(p->left);
    DestroyTree(p->right);

    free(p);
    p=NULL;
}


PS:新增了释放树功能~及时释放内存要养成习惯~

[此贴子已经被作者于2017-3-20 22:14编辑过]


[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-03-20 21:33
快速回复:输入任意10个数字,按照左子树一定比右子树小的规则构建二叉树。 同时 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.022166 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved