Chinaunix首页 | 论坛 | 博客
  • 博客访问: 523724
  • 博文数量: 118
  • 博客积分: 10028
  • 博客等级: 上将
  • 技术积分: 1820
  • 用 户 组: 普通用户
  • 注册时间: 2007-11-07 18:46
文章分类

全部博文(118)

文章存档

2009年(12)

2008年(106)

我的朋友

分类: C/C++

2008-11-24 21:05:30


关于二叉树遍历规则:http://blog.chinaunix.net/u1/53217/showart_1331012.html

采用递归的方式创建和遍历链式二叉树

NOTE:
   1、build_tree函数中必须加入fflush(stdin);因为前面一次输入有一个回车符
   2、build_tree函数的参数需要传递t的地址而不是t, 即&t
   3、有3个版本的,选个最简单的发,前两个是数据结构书上的
   4、scanf_s是VC里面的,用scanf当然是可以的,VC警告说不安全
输入:
   每输入一个字符回车,按先序遍历顺序输入,无节点的则输入空格(如果你不知道输入的树是什么样的那就在最后不断的输入空格回车吧,总会结束的!)

代码:

#include <stdio.h>
#include <stdlib.h>

#define OK 1

struct node{
    char key;
    struct node *lchild;
    struct node *rchild;
};
typedef struct node Node;

char key;

/* 必须传递指针的指针 ,因为有malloc操作,形参改变不会影响实参 */
int build_tree(Node **t)

{
    scanf_s("%c",&key);
    fflush(stdin); /* 清除回车符 */

    if(key==' '){
        *t=NULL;
    }
    else{
        *t=(Node *)malloc(sizeof(Node));
        if(*t == NULL){
            printf("Malloc error!\n");
            exit(1);
        }
        (*t)->key=key;
        //(*t)->lchild=NULL;
        //(*t)->rchild=NULL;
        build_tree(&(*t)->lchild);
        build_tree(&(*t)->rchild);
    }
    return OK;
}

int PreOrderTraverse(Node *t)
{
    if(t){
        printf("%c",t->key);
        PreOrderTraverse(t->lchild);
        PreOrderTraverse(t->rchild);
    }
    return OK;
}

int InOrderTraverse(Node *t)
{
    if(t){
        InOrderTraverse(t->lchild);
        printf("%c",t->key);
        InOrderTraverse(t->rchild);
    }
    return OK;
}

int PostOrderTraverse(Node *t)
{
    if(t){
        PostOrderTraverse(t->lchild);
        PostOrderTraverse(t->rchild);
        printf("%c",t->key);
    }
    return OK;
}

int main(int argc,char **argv)
{
    Node *tree=NULL;

    printf("Input nodes:\n");
    build_tree(&tree);

    printf("The previous order:");
    PreOrderTraverse(tree);
    printf("\n");

    printf("The in order:");
    InOrderTraverse(tree);
    printf("\n");

    printf("The post order:");
    PostOrderTraverse(tree);
    printf("\n");

    return 0;
}

阅读(820) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~