计算机领域的进步是很难找到恰当的时间单位来衡量的。有些大教堂用了一个世纪才建成。你能想象耗时如此之久的程序该有多么庞大、多么壮观吗?——Alan J.Perlis
我们之前在讲解二叉树的链式结构的博客中手动建立了一颗二叉树,今天我们通过一道题来讲解二叉树真正的创建方式。
1.遍历二叉树
1.1题目描述
1.2 思路分析
题目中给的是先序遍历的字符数组,那我们可以通过先序遍历的思想递归构建一棵二叉树。也就是按照根、根的左子树、根的右子树进行构建。如果遇到’#'则表示是空树(最小规模子问题),直接返回return NULL;
1.3代码演示及递归图解
#include <stdio.h>
typedef struct BinaryTreeNode
{
char data;
struct BinaryTreeNode* left;
struct BinaryTreeNode* right;
}BTNode;
BTNode* CreateTree(char* a, int* pi)
{
//最小规模子问题,直接返回
if(a[*pi] == '#')
{
(*pi)++;
return NULL;
}
BTNode* root = (BTNode*)malloc(sizeof(BTNode));
//根
root->data = a[(*pi)++];
//左子树
root->left = CreateTree(a, pi);
//右子树
root->right = CreateTree(a, pi);
return root;
}
void InOrder(BTNode* root)
{
if(root == NULL)
return;
InOrder(root->left);
printf("%c ",root->data);
InOrder(root->right);
}
int main()
{
char a[100];
scanf("%s",a);
int i = 0;
BTNode* tree = CreateTree(a, &i);
InOrder(tree);
return 0;
}