二叉树的遍历C语言

二叉树作为FDS课程最核心的数据结构之一,要求每个人都掌握!

这是一道简单的二叉树问题!

我们将给出一颗二叉树,请你输出它的三种遍历,分别是先序遍历,中序遍历,后序遍历!

输入格式 :

二叉树将以这样的形式给出:

第一行给出一个正整数N(N<=100),表示二叉树上的节点个数!

接下来N行,每行包含三个整数,i,l,r,分别代表第i个节点的左右孩子!

如果它的左/右孩子为空,则在对应位置给出-1!

题目保证1是根节点!

输出格式 :

请你输出它的三种遍历!

第一行输出先序遍历,第二行输出中序遍历,第三行输出后序遍历!

每行末尾无多余空格!

输入样例 :

在这里给出一组输入。例如:

3

1 2 3

2 -1 -1

3 -1 -1

输出样例 :

在这里给出相应的输出。例如:

1 2 3

2 1 3

2 3 1

c 复制代码
#include <stdio.h>
#include <stdlib.h>

typedef int Elementyple;
typedef struct TNode* BiTree;
typedef struct TNode{
    Elementyple Data;
    struct TNode* Left;
    struct TNode* Right;
}tnode;

int N;

BiTree createNode() {
   BiTree node = new TNode;
    node->Left = NULL;
    node->Right = NULL;
    return node;
}

BiTree CreaTree(int number[10000][15],int x){
	if(x==-1)
	return NULL;
     BiTree BT;
    // BT=(BiTree)malloc(sizeof(struct TNode));
    BT=createNode();
     BT->Data=x;
     BT->Left=CreaTree(number,number[x][0]);
     BT->Right=CreaTree(number,number[x][1]);
     return BT;
}
int flag=0;

void PreorderTraversal( BiTree BT ){
    if(BT){
	    flag++;
	    if(flag==N)
	    printf("%d",BT->Data);
		else 
        printf("%d ",BT->Data);
        PreorderTraversal(BT->Left);
        PreorderTraversal(BT->Right);
    }
}
void InorderTraversal( BiTree BT){
    if(BT){
        InorderTraversal(BT->Left);
        flag++;
        if(flag==2*N)
            printf("%d",BT->Data);
        else
        printf("%d ",BT->Data);
        InorderTraversal(BT->Right);
        
    }
}
void PostorderTraversal( BiTree BT ){
    if(BT){
        PostorderTraversal(BT->Left);
        PostorderTraversal(BT->Right);
        flag++;
        if(flag==3*N)
        printf("%d",BT->Data);
        else
        printf("%d ",BT->Data);
    }
}
int main(){
    int i,a[10000][15],b[10000];
    scanf("%d",&N);
    for(i=1;i<=N;i++){
        scanf("%d%d%d",&b[i],&a[i][0],&a[i][1]);
    }
     BiTree BT; 
     BT=CreaTree(a,1);
     PreorderTraversal(BT);
     printf("\n");
     InorderTraversal(BT);
     printf("\n");
     PostorderTraversal(BT);
}
相关推荐
房开民3 小时前
使用海康机器人相机SDK实现基本参数配置(C语言示例)
c语言·数码相机·机器人
Tina表姐4 小时前
(C题|NIPT 的时点选择与胎儿的异常判定)2025年高教杯全国大学生数学建模国赛解题思路|完整代码论文集合
c语言·开发语言·数学建模
高山有多高6 小时前
详解文件操作
c语言·开发语言·数据库·c++·算法
恒森宇电子有限公司10 小时前
IP5326_BZ 支持C同口输入输出的移动电源芯片 2.4A的充放电电流 支持4LED指示灯
c语言·开发语言·单片机
曙曙学编程11 小时前
stm32——NVIC,EXIT
c语言·c++·stm32·单片机·嵌入式硬件
HUST11 小时前
C语言 第三讲:分支和循环(上)
c语言·开发语言
今日待办12 小时前
Arduino Nano33 BLESense Rev2【室内空气质量检测语音识别蓝牙调光台灯】
c语言·单片机·嵌入式硬件·mcu·语音识别·ardunio·arduinonano33
这里没有酒14 小时前
[C语言] 结构体 内存对齐规则 内存大小计算
c语言·开发语言
半夜吃早餐16 小时前
【STM32HAL-----NRF24L01】
c语言·开发语言·stm32·单片机·嵌入式硬件
ShineWinsu18 小时前
对于单链表相关经典算法题:206. 反转链表及876. 链表的中间结点的解析
java·c语言·数据结构·学习·算法·链表·力扣