一、题目
- 示例1中的二叉树为:
二、代码
注意:每一层递归访问同一个下标的时候,比如访问i,那么就把i的地址传过去,每个栈帧都是通过地址去解引用,那么找到的就是同一个i
#include <stdio.h>
#include<stdlib.h>
typedef int BTDataType;
typedef struct BinaryTree {
BTDataType data;
struct BinaryTree* left;
struct BinaryTree* right;
} BTNode;
BTNode* NewNode(BTDataType x)//建立结点
{
BTNode* newnode = (BTNode*)malloc(sizeof(BTNode));
if (newnode == NULL)
{
perror("malloc fail!");
return NULL;
}
newnode->data = x;
newnode->left = NULL;
newnode->right = NULL;
return newnode;
}
BTNode* CreateTree(char* a, int* i)//创建树
{
if (a[*i] != '#')
{
BTNode* root = NewNode(a[*i]);
(*i)++;
root->left = CreateTree(a, i);
root->right = CreateTree(a, i);
return root;
}
else
{
(*i)++;
return NULL;
}
}
void InOrder(BTNode* root)
{
if (root == NULL)
return;
InOrder(root->left);
printf("%c ", root->data);
InOrder(root->right);
return;
}
int main()
{
char data[100];
int pi = 0;
scanf("%s", data);
BTNode* root = CreateTree(data, &pi);
InOrder(root);
return 0;
}