二叉树的遍历(IO型)
二叉树遍历_牛客题霸_牛客网 (nowcoder.com)
题目描述
![image-20210621205635444](/images/NowCoder%E5%88%B7%E9%A2%98(1)%E3%80%90%E6%A0%91%E3%80%91%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E9%81%8D%E5%8E%86.assets/image-20210621205635444.png)
如图所示的这棵树
![image-20210620204206164](/images/NowCoder%E5%88%B7%E9%A2%98(1)%E3%80%90%E6%A0%91%E3%80%91%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E9%81%8D%E5%8E%86.assets/image-20210620204206164.png)
前序输出结果为
A-B-D-#-#-E-#-#-C-#-#
还原过程
示例1
![image-20210621191417552](/images/NowCoder%E5%88%B7%E9%A2%98(1)%E3%80%90%E6%A0%91%E3%80%91%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E9%81%8D%E5%8E%86.assets/image-20210621191417552.png)
示例2
——前序遍历还原
![image-20210621192508286](/images/NowCoder%E5%88%B7%E9%A2%98(1)%E3%80%90%E6%A0%91%E3%80%91%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E9%81%8D%E5%8E%86.assets/image-20210621192508286.png)
代码实现:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
| #include<stdio.h>
typedef struct TreeNode { struct TreeNode* left; struct TreeNode* right; char val; }TreeNode;
TreeNode* CreatBackTree(char* a, int* i) { if (a[*i] == '#') { ++(*i); return NULL; } TreeNode* root = (TreeNode*)malloc(sizeof(TreeNode)); if (root == NULL) { printf("malloc is fail"); exit(-1); } root->val = a[*i]; (*i)++; root->left = CreatBackTree(a, i); root->right = CreatBackTree(a, i); return root; }
void InOrderTree(TreeNode* root) { if (root == NULL) { return; } InOrderTree(root->left); printf("%c ", root->val); InOrderTree(root->right); } int main(void) { char arry[100]; scanf("%s", arry); int i = 0; TreeNode* root = CreatBackTree(arry, &i); InOrderTree(root); return 0; }
|
![](/images/NowCoder%E5%88%B7%E9%A2%98(1)%E3%80%90%E6%A0%91%E3%80%91%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E9%81%8D%E5%8E%86.assets/%E4%BA%8C%E5%8F%89%E6%A0%91%E9%81%8D%E5%8E%8622-1624279920068.png)