解题思路:
这道题要求将输入的基本单元形如 ROOT(left,right)格式的数据以二叉树的形式储存(看代码注释),并以先序遍历输出。
二叉树部分知识比较简单好理解,就是要注意二叉树的创建遍历等操作均需要递归完成。
具体操作见代码,代码中有部分注释。
题解代码:
#include<stdio.h>
#include<stdlib.h>
typedef struct BinTreeNode{
char data;
struct BinTreeNode *left;
struct BinTreeNode *right;
}BinTreeNode;
void CreatBinTree(BinTreeNode *T){
char data1,data2;
T->left = NULL;
T->right = NULL;
data1 = getchar();
data2 = getchar();
//每次读取两个字符,判断数据X为根还是叶
//1.data【X+(】,数据为根
//2.data【X+,】,数据为叶
//3.data【X+)】,数据为叶
//4.data【,+X+(】,数据为根
//5.data【,+X+)】,数据为叶
if(data1==','){
T->data = data2;
data1 = getchar();
if(data1=='('){
T->left = (BinTreeNode*)malloc(sizeof(BinTreeNode));
CreatBinTree(T->left);
T->right = (BinTreeNode*)malloc(sizeof(BinTreeNode));
CreatBinTree(T->right);
}
}
else{
T->data = data1;
if(data2=='('){
T->left = (BinTreeNode*)malloc(sizeof(BinTreeNode));
CreatBinTree(T->left);
T->right = (BinTreeNode*)malloc(sizeof(BinTreeNode));
CreatBinTree(T->right);
}
}
}
void preOrderOutput(BinTreeNode *T){
printf("%c",T->data);
if(T->left){
preOrderOutput(T->left);
}
if(T->right){
preOrderOutput(T->right);
}
}
int main(){
BinTreeNode *T;
T = (BinTreeNode*)malloc(sizeof(BinTreeNode));
CreatBinTree(T);
preOrderOutput(T);
return 0;
}