# include <stdio.h>
# include <stdlib.h> typedef struct BiTreeNode {
char data;
struct BiTreeNode * lchild;
struct BiTreeNode * rchild;
}BTNode, * pBTNode; pBTNode createBTree();
void assign(pBTNode * ppn, char data, pBTNode plc, pBTNode prc);
void PreTraverse(pBTNode pt);
void InTraverse(pBTNode pt);
void PostTraverse(pBTNode pt); int main(void) {
pBTNode root = createBTree();
// printf("[root] data->%c lchild->%d rchild->%d add=%d\n", root->data, root->lchild, root->rchild, root); printf("-PreTraverse-\n");
PreTraverse(root);
printf("\n"); printf("-InTraverse-\n");
InTraverse(root);
printf("\n"); printf("-PostTraverse-\n");
PostTraverse(root);
printf("\n"); return 0;
} pBTNode createBTree() {
pBTNode p1 = (pBTNode)malloc(sizeof(BTNode));
pBTNode p2 = (pBTNode)malloc(sizeof(BTNode));
pBTNode p3 = (pBTNode)malloc(sizeof(BTNode));
pBTNode p4 = (pBTNode)malloc(sizeof(BTNode));
pBTNode p5 = (pBTNode)malloc(sizeof(BTNode));
pBTNode p6 = (pBTNode)malloc(sizeof(BTNode)); assign(&p1, '1', p2, p5);
assign(&p2, '2', p3, p4);
assign(&p3, '3', NULL, NULL);
assign(&p4, '4', NULL, NULL);
assign(&p5, '5', p6, NULL);
assign(&p6, '6', NULL, NULL);
/*
printf("[p1] data->%c lchild->%d rchild->%d add=%d\n", p1->data, p1->lchild, p1->rchild, p1);
printf("[p2] data->%c lchild->%d rchild->%d add=%d\n", p2->data, p2->lchild, p2->rchild, p2);
printf("[p3] data->%c lchild->%d rchild->%d add=%d\n", p3->data, p3->lchild, p3->rchild, p3);
printf("[p4] data->%c lchild->%d rchild->%d add=%d\n", p4->data, p4->lchild, p4->rchild, p4);
printf("[p5] data->%c lchild->%d rchild->%d add=%d\n", p5->data, p5->lchild, p5->rchild, p5);
printf("[p6] data->%c lchild->%d rchild->%d add=%d\n", p6->data, p6->lchild, p6->rchild, p6);
*/
return p1;
} void assign(pBTNode * ppn, char data, pBTNode pl, pBTNode pr) {
(*ppn)->data = data;
(*ppn)->lchild = pl;
(*ppn)->rchild = pr;
} void PreTraverse(pBTNode pt) {
if (pt == NULL) return; printf("%c\n", pt->data);
PreTraverse(pt->lchild);
PreTraverse(pt->rchild);
} void InTraverse(pBTNode pt) {
if (pt == NULL) return; InTraverse(pt->lchild);
printf("%c\n", pt->data);
InTraverse(pt->rchild);
} void PostTraverse(pBTNode pt) {
if (pt == NULL) return; PostTraverse(pt->lchild);
PostTraverse(pt->rchild);
printf("%c\n", pt->data);
}

数据结构_C语言_二叉树先序、中序、后序遍历的更多相关文章

  1. 分别求二叉树前、中、后序的第k个节点

    一.求二叉树的前序遍历中的第k个节点 //求先序遍历中的第k个节点的值 ; elemType preNode(BTNode *root,int k){ if(root==NULL) return ' ...

  2. 数据结构_C语言_单链表

    # include <stdio.h> # include <stdbool.h> # include <malloc.h> typedef int DataTyp ...

  3. 选择排序_C语言_数组

    选择排序_C语言_数组 #include <stdio.h> void select_sort(int *); int main(int argc, const char * argv[] ...

  4. 插入排序_C语言_数组

    插入排序_C语言_数组 #include <stdio.h> void insertSort(int *); int main(int argc, const char * argv[]) ...

  5. 快速排序_C语言_数组

    快速排序_C语言_数组 #include <stdio.h> void quickSort(int *, int, int); int searchPos(int *, int, int) ...

  6. 冒泡排序_C语言_数组

    冒泡排序_C语言_数组 #include <stdio.h> //冒泡排序 小->大 void sort(int * pArray, int len); int main(int a ...

  7. 前、中、后序遍历随意两种是否能确定一个二叉树?理由? && 栈和队列的特点和区别

    前序和后序不能确定二叉树理由:前序和后序在本质上都是将父节点与子结点进行分离,但并没有指明左子树和右子树的能力,因此得到这两个序列只能明确父子关系,而不能确定一个二叉树. 由二叉树的中序和前序遍历序列 ...

  8. [Java]算术表达式求值之二(中序表达式转后序表达式方案,支持小数)

    Inlet类,入口类,这个类的主要用途是验证用户输入的算术表达式: package com.hy; import java.io.BufferedReader; import java.io.IOEx ...

  9. [Java]算术表达式求值之一(中序表达式转后序表达式方案)

    第二版请见:https://www.cnblogs.com/xiandedanteng/p/11451359.html 入口类,这个类的主要用途是粗筛用户输入的算术表达式: package com.h ...

随机推荐

  1. Spring Boot 自动配置原理是什么?

    注解 @EnableAutoConfiguration, @Configuration, @ConditionalOnClass 就是自动配置的核心,首先它得是一个配置文件,其次根据类路径下是否有这个 ...

  2. Springmvc入门基础(一) ---基于idea创建demo项目

    Springmvc是什么 Springmvc和Struts2都属于表现层的框架,它是Spring框架的一部分,我们可以从Spring的整体结构中看得出来,如下图: Springmvc处理流程 ---- ...

  3. char 和 varchar 的区别是什么?float 和 double 的区别是什么?

    char 和 varchar 的区别是什么? char(n) :固定长度类型,比如订阅 char(10),当你输入"abc"三个字符的时候,它们占的空间还是 10 个字节,其他 7 ...

  4. Mosquitto安装和使用

    Mosquitto是一个实现了MQTT3.1协议的代理服务器,由MQTT协议创始人之一的Andy Stanford-Clark开发,它为我们提供了非常棒的轻量级数据交换的解决方案. 下载地址是: ht ...

  5. vue集成CKEditor构建框架的使用,遇到富文本框不出现工具栏等操作

    官方关于Vue集成CKEditor富文本框的文档:https://ckeditor.com/docs/ckeditor5/latest/builds/guides/integration/framew ...

  6. 四、Springboot+jpa+mycat应用

    一.后台配置文件 # 连接地址 url: jdbc:mysql://127.0.0.1:8066/CHUNK?useUnicode=true&characterEncoding=utf-8&a ...

  7. SpringDataJpa 实体类过滤伪删除

    当需要过滤实体类的数据时,根据伪删除字段进行过滤,需要使用Hibernate提供的@Where注解 使用方式: @Entity(name = "Account") @Where( ...

  8. MyBatis 实现一对多有几种方式,怎么操作的?

    有联合查询和嵌套查询.联合查询是几个表联合查询,只查询一次,通过在 resultMap 里面的 collection 节点配置一对多的类就可以完成:嵌套查询是先查 一个表,根据这个表里面的 结果的外键 ...

  9. Noob渗透笔记

    靶机下载地址:https://www.vulnhub.com/entry/noob-1,746/ kali ip 信息收集 依旧我们先使用nmap扫描确定一下靶机ip nmap -sP 192.168 ...

  10. (stm32f103学习总结)—ADC模数转换实验

    一.STM32F1 ADC介绍 TM32F103 系列一般都有 3 个 ADC,这些 ADC 可以独立使用,也可 以使用双重(提高采样率).STM32F1 的 ADC 是 12 位逐次 逼近型的模拟数 ...