成都网站建设设计

将想法与焦点和您一起共享

C语言根据层次输入创建二叉树-创新互联

思想:

用一个数组接收层次输入(下标0不存储信息),看图可以发现父节点的左子树是自身下标乘以二,右子树是自身下标乘以二再加一。

员工经过长期磨合与沉淀,具备了协作精神,得以通过团队的力量开发出优质的产品。创新互联坚持“专注、创新、易用”的产品理念,因为“专注所以专业、创新互联网站所以易用所以简单”。公司专注于为企业提供做网站、成都做网站、微信公众号开发、电商网站开发,小程序开发,软件按需定制等一站式互联网企业服务。

A的下标是1,下标乘以二是左子树B的下标,下标乘以二再加一是有子树C的下标。

如果左子树或者右子树的下标对应的字符为‘*’,则当前为NULL,没有子树。

如果当前下标左子树下标大于数组长度(自身下标*2>数组长度),则当前没有左子树(为NULL)。

如果当前下标右子树下标大于数组长度(自身下标*2+1>数组长度),则当前没有右子树(为NULL)。

#define _CRT_SECURE_NO_WARNINGS
#include#include#include// 创建树的数据类型
typedef struct Node {
    char val;
    struct Node* leftChild = NULL;
    struct Node* rightChild = NULL;
} Tree, * BiTree;

void preVisit(BiTree T);  // 先序遍历 
void midVisit(BiTree T);  // 中序遍历
void postVistit(BiTree T);// 后序遍历
void createTree(BiTree& T, int index);  // 用层次输入的数据。创建二叉树 
void inputData(BiTree& T);              // 输入树的层次遍历 

int main(void) {
    BiTree T;
    inputData(T);
    printf("\n先序:");
    preVisit(T);
    printf("\n中序:");
    midVisit(T);
    printf("\n后序:");
    postVistit(T);
}


char str[100];
int num = 1;
void createTree(BiTree& T, int index) {
    if (str[index] == '*') {
        T = NULL;
        return;
    }
    T = (BiTree)malloc(sizeof(Tree));
    T->val = str[index];
    T->leftChild = NULL;
    T->rightChild = NULL;
    if (index * 2<= num) {
        createTree(T->leftChild, index * 2);
    }
    if (index * 2 + 1<= num) {
        createTree(T->rightChild, index * 2 + 1);
    }
}
void inputData(BiTree& T) {
    char ch;
    while (1) {
        scanf("%c", &ch);
        if (ch == '@')
            break;
        str[num++] = ch;
    }
    num--;
    createTree(T, 1);
}

void preVisit(BiTree T) {
    if (T) {
        printf("%c", T->val);
        preVisit(T->leftChild);
        preVisit(T->rightChild);
    }
}
// 中序遍历
void midVisit(BiTree T) {
    if (T) {
        midVisit(T->leftChild);
        printf("%c", T->val);
        midVisit(T->rightChild);

    }
}
// 后序遍历
void postVistit(BiTree T) {
    if (T) {
        postVistit(T->leftChild);
        postVistit(T->rightChild);
        printf("%c", T->val);
    }
}

输入:abd*c*e@

输出如图:

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


分享标题:C语言根据层次输入创建二叉树-创新互联
分享网址:http://chengdu.cdxwcx.cn/article/djpdds.html