leetcode-二叉树的后序遍历-37

题目要求
  编一个程序,读入用户输入的一串先序遍历字符串,根据此字符串建立一个二叉树(以指针方式存储)。 例如如下的先序遍历字符串: ABC##DE#G##F### 其中“#”表示的是空格,空格字符代表空树。建立起此二叉树以后,再对二叉树进行中序遍历,输出遍历结果。

思路
  这个题本身并不是接口类型的题,因此需要我们自己构建一个树的结构体,首先我们需要根据给的数组进行树的重建,因为题目给的是先序遍历,因此,开始给的所有的非空节点都是最左边的节点,通过先序遍历根左右的特点对树进行重建,然后再调用中序遍历打印出树。

代码实现

#include <stdio.h>
#include <stdlib.h>

typedef struct TreeNode
{
	struct TreeNode* left;
	struct TreeNode* right;
	char val;
}TreeNode;

TreeNode* reBuildTree(char* str, int* pi)
{
	if (str[*pi] == '#')
	{
		return NULL;
	}
	TreeNode* root = (TreeNode*)malloc(sizeof(TreeNode));
	root->val = str[*pi];
	(*pi)++;
	root->left = reBuildTree(str, pi);
	(*pi)++;
	root->right = reBuildTree(str, pi);

	return root;
}

void InOrderTree(TreeNode* root)
{
	if (root == NULL)
	{
		return;
	}

	InOrderTree(root->left);
	printf("%c ", root->val);
	InOrderTree(root->right);
}

int main()
{
	char str[100];
	while (scanf("%s", str) != EOF)
	{
		int i = 0;
		TreeNode* tree = reBuildTree(str, &i);
		InOrderTree(tree);
		printf("\n");
	}

	return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_43580319/article/details/114907635