给定一棵大小为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无用