C语言根据层次输入创建二叉树-创新互联
思想:
分享名称:C语言根据层次输入创建二叉树-创新互联
链接地址:http://azwzsj.com/article/djpdds.html
用一个数组接收层次输入(下标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://azwzsj.com/article/djpdds.html