题目描述:https://pycoder.blog.csdn.net/article/details/125126797
这道题很值得做一下,能写出来,有很大的成就感,哈哈
二叉树建树思想(递归逻辑)
二叉树遍历思想(递归逻辑)
不太懂的,可以在网上找点资料看看,CSDN或者知乎上都有很多,这里就不重复造轮子了。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
struct Tree {
char val;
struct Tree *left;
struct Tree *right;
};
void find_r_l_start_end(char *s, int start, int end, int *l_e, int *r_s)
{
int flag = 0;
for (int i = start; i < end; i++) {
if (s[i] == '{') flag++;
if (s[i] == '}') flag--;
if (flag == 1 && s[i] == ',') {
*l_e = i;
*r_s = i+1;
return;
}
}
*l_e = start+3;
*r_s = start+3;
return;
}
struct Tree *dfs(char *s, int start, int end)
{
struct Tree *node = NULL;
int left_end, right_start;
if (start == end) {
return NULL;
}
node = (struct Tree *)malloc(sizeof(struct Tree));
if (end - start == 1) {
node->val = s[start];
node->left = NULL;
node->right = NULL;
return node;
}
find_r_l_start_end(s, start, end, &left_end, &right_start);
node->val = s[start];
node->left = dfs(s, start+2, left_end);
node->right = dfs(s, right_start, end-1);
return node;
}
void inorder(struct Tree *root)
{
if (root == NULL) return;
inorder(root->left);
printf("%c", root->val);
inorder(root->right);
}
int main(void)
{
char str[1000] = {0};
struct Tree *root = NULL;
gets(str);
root = dfs(str, 0, strlen(str));
inorder(root);
printf("\n");
return 0;
}