一、题目链接
https://www.nowcoder.com/practice/4b91205483694f449f94c179883c1fef?tpId=60&&tqId=29483&rp=1&ru=/activity/oj&qru=/ta/tsing-kaoyan/question-ranking
二、题目思路
利用先序遍历的方法,构建二叉树。为了保证在递归中,字符数组的下标会变化,我们需要使用其的指针来实现对它的改变。
三、题解代码
typedef struct BinaryTree
{struct BinaryTree*left;struct BinaryTree*right;char data;
} BinaryTree;//创建二叉树
BinaryTree *CreateBinaryTree(char *a,int *pi)
{//如果当前字符为'#',说明当前结点为空结点if(a[*pi]=='#'){(*pi)++; //移动下标到下一位return NULL;}//不是'#',就要申请一个新的结点,存储当前字符数据BinaryTree *newnode=(BinaryTree *)malloc(sizeof(BinaryTree));if(newnode==NULL){perror("malloc fail");return NULL;}newnode->data=a[*pi]; (*pi)++; //移动下标到下一位//构建左右子树newnode->left=CreateBinaryTree(a,pi);newnode->right=CreateBinaryTree(a,pi);return newnode;
}// 二叉树中序遍历
void BinaryTreeInOrder(BinaryTree* root)
{if (root == NULL){return;}BinaryTreeInOrder(root->left);printf("%c ", root->data);BinaryTreeInOrder(root->right);
}int main() {char arr[100]={0};scanf("%s",arr);int i=0;//创建二叉树BinaryTree *root=CreateBinaryTree(arr,&i);BinaryTreeInOrder(root);return 0;
}