| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2780 人关注过本帖, 1 人收藏
标题:使用二叉链表建立二叉排序树
只看楼主 加入收藏
xingfulovexi
Rank: 1
等 级:新手上路
帖 子:17
专家分:7
注 册:2012-1-18
结帖率:0
收藏(1)
 问题点数:0 回复次数:9 
使用二叉链表建立二叉排序树
输入n个关键码(n≤80),使用二叉链表建立二叉排序树,查找关键码x,删除x,中序输出排序树,否则输出“x不存在”。 我知道这是在要答案,可是我们书上根本没有这类题,问老师吧又说让我自己探索,唉,谢谢大家帮帮忙咯。

搜索更多相关主题的帖子: 老师 
2012-05-19 10:48
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
呵呵,也不给分

关键码是什么类型的?

重剑无锋,大巧不工
2012-05-19 14:00
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
唉,等不到你回复了。
没分就没分吧,我以整型为例写了一个简单的示例,给你以及对这部分知识有疑问的朋友参考。

程序代码:
#include<stdio.h>
#include<malloc.h>

typedef struct node
{
    int data;
    struct node * left;
    struct node * right;
}NODE, * TREE;

void insert(TREE * tree, NODE * node)
{
    if(node == NULL) return;
    if(*tree == NULL) *tree = node;
    if((*tree)->data > node->data)
        insert(&((*tree)->left), node);
    else if((*tree)->data < node->data)
        insert(&((*tree)->right), node);
}

void insertValue(TREE * tree, int value)
{
    NODE * node;
    node = (NODE *)malloc(sizeof(NODE));
    node->data = value;
    node->left = NULL;
    node->right = NULL;
    insert(tree, node);
}

int deleteValue(TREE * tree, int value)
{
    NODE * node;
    if(*tree == NULL) return 0;
    if((*tree)->data < value) return deleteValue(&((*tree)->left), value);
    if((*tree)->data > value) return deleteValue(&((*tree)->right), value);
    insert(&((*tree)->right), (*tree)->left);
    node = (*tree)->right;
    free(*tree);
    *tree = node;
    return 1;
}

void deleteTree(TREE * tree)
{
    if(*tree == NULL) return;
    deleteTree(&((*tree)->left));
    deleteTree(&((*tree)->right));
    free(*tree);
}

void inorderTraversal(TREE tree)
{
    if(tree == NULL) return;
    inorderTraversal(tree->left);
    printf("%d ", tree->data);
    inorderTraversal(tree->right);
}

int main()
{
    int a[] = {5, 3, 8, 7, 1, 9}, i;
    TREE tree = NULL;
   
    for(i = 0; i < 6; i++)
        insertValue(&tree, a[i]);
   
    inorderTraversal(tree);
    puts("\n删除值5(存在)");
    if(!deleteValue(&tree, 5)) puts("值5不存在");
    inorderTraversal(tree);
    puts("\n删除值6(不存在)");
    if(!deleteValue(&tree, 6)) puts("值6不存在");
    inorderTraversal(tree);
    deleteTree(&tree);
    return 0;
}


[ 本帖最后由 beyondyf 于 2012-5-19 16:37 编辑 ]

重剑无锋,大巧不工
2012-05-19 16:31
xingfulovexi
Rank: 1
等 级:新手上路
帖 子:17
专家分:7
注 册:2012-1-18
收藏
得分:0 
呵呵 ,人家可穷额,没有分分咯,谢谢你的帮助啊,主要是停电了,所以没来及回复·····
2012-05-20 21:13
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
能理解这段代码,你的指针就学得差不多了。

重剑无锋,大巧不工
2012-05-21 11:04
xingfulovexi
Rank: 1
等 级:新手上路
帖 子:17
专家分:7
注 册:2012-1-18
收藏
得分:0 
可以解释一下这个程序么?
2012-05-25 19:35
xingfulovexi
Rank: 1
等 级:新手上路
帖 子:17
专家分:7
注 册:2012-1-18
收藏
得分:0 
回复 5楼 beyondyf
帮解释一下呗。。 流程图神马的。。  看不懂。。 谢谢了。。
2012-05-28 16:28
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
这都是些基础知识,呵呵,你想让我怎么讲?

建议你先重新学习一下C语言有关指针的章节,之后再重新学习数据结构有关链表的章节。

很多人存在的情况是觉得看书能看懂,但到实际写代码的环节不知如何下手。

我写示例的目的是做个示范。但如果连我的代码都看不懂的话,那说明基础不行,重新学习吧。

重剑无锋,大巧不工
2012-05-28 18:06
xingfulovexi
Rank: 1
等 级:新手上路
帖 子:17
专家分:7
注 册:2012-1-18
收藏
得分:0 
回复 8楼 beyondyf
帮我写个流程就OK,好不好,十分感谢了,顺便解释一下 子函数
2012-05-28 18:15
转尔
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2016-9-30
收藏
得分:0 
2016-10-23 16:19
快速回复:使用二叉链表建立二叉排序树
数据加载中...
 
   



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

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