二叉树--九度.1201.[二叉排序树]

题目:http://ac.jobdu.com/problem.php?pid=1201

/***************************************************
FileName: 九度1201.二叉排序树
Author:3stone
Time:2017/2/25
题意:建立二叉排序树,并进行前中后序遍历输出
*************************************************** */
#include<cstdio>
#include<cstring>

struct Node{
    Node * lchild;
    Node * rchild;
    int c;
}Tree[110];  //静态数组,并非指针数组

int loc;  //记录静态数组中被使用的元素个数

Node *creat() { //申请未使用结点
    Tree[loc].lchild = Tree[loc].rchild = NULL;
    return &Tree[loc++];
}

//并没有消去每行最后多余的空格!!【待修补】
void postOrder(Node *T) {//后序遍历
    if (T->lchild != NULL)
        postOrder(T->lchild);
    if (T->rchild != NULL)
        postOrder(T->rchild);
    printf("%d ", T->c);
}
void inOrder(Node *T) {//中序遍历
    if (T->lchild != NULL)
        inOrder(T->lchild);
    printf("%d ", T->c);
    if (T->rchild != NULL)
        inOrder(T->rchild);
}
void preOrder(Node *T) {//前序遍历
    printf("%d ", T->c);
    if (T->lchild != NULL)
        preOrder(T->lchild);
    if (T->rchild != NULL)
        preOrder(T->rchild);
}

Node *Insert(Node *T, int x) {
    if (T == NULL) {
        T = creat();
        T->c = x;
        return T;
    }
    else if (x < T->c)//插入左子树
        T->lchild = Insert(T->lchild, x);
    else if(x > T->c)
        T->rchild = Insert(T->rchild, x);

    return T; //最后返回的是根节点
}


int main() {
    int n;
    while (scanf("%d", &n) != EOF) {
        loc = 0;
        Node *T = NULL;
        for (int i = 0; i < n; i++) {//建立二叉树
            int x;
            scanf("%d", &x);
            T = Insert(T, x);
        }
        //输出
        preOrder(T); printf("\n");
        inOrder(T); printf("\n");
        postOrder(T); printf("\n");
    }

    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值