回 帖 发 新 帖 刷新版面

主题:求算法(简单不要见笑)

第三题:输入一个字符串,建立一个二叉排序树,并中序遍历输出;

要求:TC环境

回复列表 (共5个回复)

沙发

等待中^^^^^^^^

板凳

// 二叉排序树的插入很简单,真正效率高的是AVL树,插入麻烦点
// 至于中序输出,用递归就可以了,不过效率不高
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>

#define MAX 60

typedef struct tree{
    char c;
    struct tree *left;
    struct tree *right;
}Stree;

Stree *root;

Stree* GetNewNode(){
    Stree *temp;
    temp = (Stree*)malloc(sizeof(Stree));
    if(!temp){
        printf("\a Memory alloc failed !");
        exit(1);
    }
    temp->left = NULL;
    temp->right = NULL;
    return temp;
}

void    InsertTree(char c){
    Stree *temp,*find;
    
    temp = GetNewNode();
    temp->c = c;
    find = root;
    while(1){
        if(find->c > c){
            if(!find->left){
                find->left = temp;
                break ;
            }
            else 
                find = find->left;
        }
        else {
            if(!find->right){
                find->right = temp;
                break;
            }
            else 
                find = find->right;
        }
    }
}

void    MiddleOut(Stree* ptree){
    printf("%c",ptree->c);
    if(ptree->left)
        MiddleOut(ptree->left);
    if(ptree->right)
        MiddleOut(ptree->right);
}

void    FreeMem(){
[color=FF0000]/* 交给楼主 */[/color]
}

int main(){
    char str[MAX];
    int i;

    root = GetNewNode();
    scanf("%s",str);
    root->c = str[0];
    for(i = 1; str[i]; i ++)
        InsertTree(str[i]);
    MiddleOut(root);
    FreeMem();
    return 0;
}

3 楼

谢谢楼上大侠

4 楼

#include"stdio.h"
#define MAX     60
typedef struct  tree
{
  char c;
  struct tree *left;
  struct tree *right;
}Stree;

Stree *root;

Stree * getnewnode()
{
  Stree *temp;
  temp=(Stree *)malloc(sizeof(Stree));
  if(!temp)
  {
    printf("Memory alloc failed!");
    exit(1);
  }
  temp->left=NULL;
  temp->right=NULL;
  return temp;
}

middle(Stree *ptree)
{
  if(ptree->left)
    middle(ptree->left);
  printf("%c",ptree->c);
  if(ptree->right)
    middle(ptree->right);
}

insert(char c)
{
  Stree *temp, *find;
  temp=getnewnode();
  temp->c=c;
  find=root;
  while(1)
  {
    if(find->c>c)
    {
      if(!find->left)
      {
        find->left=temp;
        break;
      }
      else
    find=find->left;
    }
    else
    {
      if(!find->right)
      {
        find->right=temp;
        break;
      }
      else
        find=find->right;
    }
  }
}

main()
{
  char str[MAX];
  int i;
  root=getnewnode();
  scanf("%s",str);
  root->c=str[0];
  for(i=1;str[i];i++)
    insert(str[i]);
  middle(root);
}

5 楼

根据大侠给出整理了一个可直接运行的C程序
再次感谢!
这个对我十分重要。

我来回复

您尚未登录,请登录后再回复。点此登录或注册