计算机领域的进步是很难找到恰当的时间单位来衡量的。有些大教堂用了一个世纪才建成。你能想象耗时如此之久的程序该有多么庞大、多么壮观吗?——Alan J.Perlis
我们之前在讲解二叉树的链式结构的博客中手动建立了一颗二叉树,今天我们通过一道题来讲解二叉树真正的创建方式。
- 1.遍历二叉树
- 1.1题目描述
- 1.2 思路分析
- 1.3代码演示及递归图解
题目链接
1.1题目描述 1.2 思路分析题目中给的是先序遍历的字符数组,那我们可以通过先序遍历的思想递归构建一棵二叉树。也就是按照根、根的左子树、根的右子树进行构建。如果遇到’#'则表示是空树(最小规模子问题),直接返回return NULL;
#includetypedef 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; }



