网站开发背景知识,微网站设计与开发是什么,白佛网站建设,网络服务网络营销描述 编一个程序#xff0c;读入用户输入的一串先序遍历字符串#xff0c;根据此字符串建立一个二叉树#xff08;以指针方式存储#xff09;。 例如如下的先序遍历字符串#xff1a; ABC##DE#G##F### 其中“#”表示的是空格#xff0c;空格字符代表空树。建立起此二叉树… 描述 编一个程序读入用户输入的一串先序遍历字符串根据此字符串建立一个二叉树以指针方式存储。 例如如下的先序遍历字符串 ABC##DE#G##F### 其中“#”表示的是空格空格字符代表空树。建立起此二叉树以后再对二叉树进行中序遍历输出遍历结果。 输入描述 输入包括1行字符串长度不超过100。 输出描述 可能有多组测试数据对于每组数据 输出将输入字符串建立二叉树后中序遍历的序列每 个字符后面都有一个空格。 每个输出结果占一行。 输入abc##de#g##f### 输出c b e g d f a 这一题很多人其实连题目都没有读懂到底是什么意思它是要我们表达什么或者是要我们干什么。其实它就是说给我们一组字符串然后要我们把这个字符串先构建成一个二叉树然后在把这个二叉数用中序遍历来输出结果就可以了。
我们一步一步的来解决这个问题
一.初始化
我们先要有个大局观先把主函数写了先把一个主要的思路完成这个题目我们的思路就是
int main() {char str[100];//创建字符数组scanf(%s,str);int i0;TNode*rootCreateTree(str,i);将字符数据变成二叉树Inorder(root);中序遍历return 0;
}当然我们还需要先初始化一个二叉树
typedef struct TreeNode
{struct TreeNode* left;struct TreeNode* right;char val;
}TNode;二.创建二叉树 TNode*CreateTree(char*a,int*pi) 首先先把char*a,int*pi传过去一个是数组名一个是下标 然后就是第一个判断如果在字符中出现了#说明是空所以我们要下标直接返回NULL这个也为后面的递归做了条件 if(a[*pi]#){(*pi);return NULL;} 首先我们要为根节点开辟空间如果是空就要报错如果不是空我们就把数组的数据存放到这个根节点里面然后要它向后走进入递归先左在右进入左了之后原左孩子变成了根节点就继续走。知道把字符数据都遍历到二叉树中去 TNode*root( TNode*)malloc(sizeof(TNode));if(rootNULL){printf(mallco fail\n);exit(-1);}root-vala[*pi];(*pi);root-leftCreateTree(a,pi);root-rightCreateTree(a,pi);
整体
TNode*CreateTree(char*a,int*pi)
{if(a[*pi]#){(*pi);return NULL;}TNode*root( TNode*)malloc(sizeof(TNode));if(rootNULL){printf(mallco fail\n);exit(-1);}root-vala[*pi];(*pi);root-leftCreateTree(a,pi);root-rightCreateTree(a,pi);return root;
}三.中序遍历
void Inorder(TNode*root)
{if(rootNULL)return;Inorder(root-left);printf(%c ,root-val);Inorder(root-right);} 总结
然后就结束了 我认为这个题目难就难在创建二叉树和题目的意思只有意思理解了就好做了