给定一棵大小为n的树,分别输出该树的前序遍历、中序遍历、后序遍历。(其中二叉树的根始终为0号节点)
输入:
输入第一行一个整数n代表树的大小
接下来n行每行三个整数,分别代表节点的下标,以及该节点左儿子的下标和右儿子的下标。其中-1代表节点为NULL
输入样例:
7
0 1 2
1 -1 -1
2 3 4
3 -1 5
4 -1 -1
5 6 -1
以及,输入样例是按层建立树吗?
二叉树的遍历,用C语言怎么写?
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- CSDN专家-天际的海浪 2021-12-07 03:02关注
你题目的解答代码如下:
#include <stdio.h> #include <malloc.h> #include <stdlib.h> typedef struct BiTNode { int data; struct BiTNode *lchild, *rchild; } BiTNode, *BiTree; int PreOrder(BiTree T) { if (!T) return 0; printf("%d ", T->data); PreOrder(T->lchild); PreOrder(T->rchild); return 1; } int InOrder(BiTree T) { if (!T) return 0; InOrder(T->lchild); printf("%d ", T->data); InOrder(T->rchild); return 1; } int PostOrder(BiTree T) { if (!T) return 0; PostOrder(T->lchild); PostOrder(T->rchild); printf("%d ", T->data); return 1; } void main() { int n,i,k,l,r; BiTree T,p; scanf("%d", &n); BiTree *a[n]; a[0] = &T; for (i = 0; i < n; i++) { scanf("%d%d%d", &k, &l, &r); p = (BiTNode *)malloc(sizeof(BiTNode)); p->lchild = NULL; p->rchild = NULL; p->data = k; *(a[k]) = p; if (l!=-1) a[l] = &p->lchild; if (r!=-1) a[r] = &p->rchild; } printf("先序遍历:"); PreOrder(T); printf("\n中序遍历:"); InOrder(T); printf("\n后序遍历:"); PostOrder(T); }
如有帮助,望采纳!谢谢!
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 2无用
悬赏问题
- ¥20 有关区间dp的问题求解
- ¥15 多电路系统共用电源的串扰问题
- ¥15 slam rangenet++配置
- ¥15 有没有研究水声通信方面的帮我改俩matlab代码
- ¥15 对于相关问题的求解与代码
- ¥15 ubuntu子系统密码忘记
- ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
- ¥15 保护模式-系统加载-段寄存器
- ¥15 电脑桌面设定一个区域禁止鼠标操作
- ¥15 求NPF226060磁芯的详细资料