【手把手带你刷好题】—— 42.清华大学考研复试题:二叉树遍历(牛客、较难)

举报
安然无虞 发表于 2022/05/26 23:56:29 2022/05/26
【摘要】 【前言】 今天是刷题打卡第42天! 早成者未必有成,晚达者未必不达,一切都还来得及,加油鸭。   原题:清华大学考研复试题:二叉树遍历 题目描述: 编一个程序,读入用户输入的一串先序遍历字符串,根据此字符串建立一个二叉树(以指针方式存储)。 例如如下的先序遍历字符串: ABC##DE#G##F### 其...

【前言】

今天是刷题打卡第42天!

早成者未必有成,晚达者未必不达,一切都还来得及,加油鸭。

 

原题:清华大学考研复试题:二叉树遍历

题目描述:

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

输入描述:

输入包括1行字符串,长度不超过100。

输出描述:

可能有多组测试数据,对于每组数据, 输出将输入字符串建立二叉树后中序遍历的序列,每个字符后面都有一个空格。 每个输出结果占一行。 

题解:

如果只给出前序遍历肯定是不能构造一棵二叉树的,但是给出了空树部分就很简单啦。详情见代码哈。

代码执行:


  
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. typedef struct TreeNode
  4. {
  5. char val;
  6. struct TreeNode* left;
  7. struct TreeNode* right;
  8. }TNode;
  9. TNode* CreateTree(char* a, int* pi)
  10. {
  11. if (a[*pi] == '#')//空树不需要递归构建,但是需要i++
  12. {
  13. (*pi)++;
  14. return NULL;
  15. }
  16. //不是空树就需要递归构建树
  17. TNode* root = (TNode*)malloc(sizeof(TNode));
  18. if (root == NULL)
  19. {
  20. printf("malloc fail\n");
  21. exit(-1);
  22. }
  23. else
  24. {
  25. root->val = a[*pi];//将当前数组中的值作为根节点值
  26. (*pi)++;
  27. root->left = CreateTree(a, pi);//递归构建左子树
  28. root->right = CreateTree(a, pi);//递归构建右子树
  29. return root;
  30. }
  31. }
  32. void InOrder(TNode* root)//中序递归遍历
  33. {
  34. if (root == NULL)
  35. {
  36. return;
  37. }
  38. InOrder(root->left);
  39. printf("%c ", root->val);
  40. InOrder(root->right);
  41. }
  42. int main()
  43. {
  44. char arr[30] = { 0 };
  45. gets(arr);
  46. int i = 0;
  47. TNode* root = CreateTree(arr, &i);
  48. InOrder(root);
  49. return 0;
  50. }

结语

今天是刷题打卡第42天!

加油吧少年。

文章来源: bit-runout.blog.csdn.net,作者:安然无虞,版权归原作者所有,如需转载,请联系作者。

原文链接:bit-runout.blog.csdn.net/article/details/121717042

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。