# 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 中禁用 Actuator 端点安全性?

    默认情况下,所有敏感的 HTTP 端点都是安全的,只有具有 ACTUATOR 角色的用户才能访问它们.安全性是使用标准的 HttpServletRequest.isUserInRole 方法实施的. ...

  2. 什么是 Spring Cloud Bus?我们需要它吗?

    考虑以下情况:我们有多个应用程序使用 Spr ng Cloud Config 读取属性,而S ring Cloud Config 从GIT 读取这些属性. 下面的例子中多个员工生产者模块从 Employe ...

  3. 在 Spring MVC 应用程序中使用 WebMvcTest 注释有什么用处?

    在测试目标只关注 Spring MVC 组件的情况下,WebMvcTest 注释用于单元测试 Spring MVC 应用程序.在上面显示的快照中,我们只想启动 ToTestController. 执行 ...

  4. mysqlbench无法启动

    mysqlbean双击没有反应,应用无法启动,缺少3要素 都缺什么呢?看这个MySQL官方链接:https://dev.mysql.com/doc/workbench/en/wb-installing ...

  5. Zookeeper 下 Server 工作状态 ?

    服务器具有四种状态,分别是 LOOKING.FOLLOWING.LEADING.OBSERVING. 1.LOOKING:寻找 Leader 状态.当服务器处于该状态时,它会认为当前集群中 没有 Le ...

  6. mybatis-02-mapper生成器插件使用

    sb_mybatis <?xml version="1.0" encoding="UTF-8"?> <project xmlns=" ...

  7. Numpy中重要的广播概念

    Numpy中重要的广播概念 广播:简单理解为用于不同大小数组的二元通用函数(加.减.乘等)的一组规则 广播的规则: 如果两个数组的维度数dim不相同,那么小维度数组的形状将会在左边补1 如果shape ...

  8. 无需Flash实现图片裁剪——HTML5中级进阶

    前言 图片裁剪上传,不仅是一个很贴合用户体验的功能,还能够统一特定图片尺寸,优化网站排版,一箭双雕. 需求就是那么简单,在浏览器里裁剪图片并上传到服务器. 我第一个想到的方法就是,将图片和裁剪参数(x ...

  9. 8 个有用的 HTML5 标签

    作为一个 web 前端开发者,在制作页面的时候你会从一大堆不同的标签中选择合适的标签来完成相应的功能.有些 HTML5 标签广为流传,例如 <article> <header> ...

  10. 【promise| async/await】代码的控制力

    什么样的代码好控制? 结构 + 节奏 --- 什么鬼? 如何控制节奏? 具体例子看看怎么控制节奏?