# 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. IDEA terminal无法从vim的编辑模式转换为命令模式

    Git 修改最后一次的commit历史记录:https://www.baidu.com/link?url=2WF8yFd0iBuVmXLWfutmSoXa12K9D143e_B0A3PTYYHEP9r ...

  2. Java 中用到的线程调度算法是什么?

    计算机通常只有一个 CPU,在任意时刻只能执行一条机器指令,每个线程只有获得 CPU 的使用权才能执行指令.所谓多线程的并发运行,其实是指从宏观上看,各个线 程轮流获得 CPU 的使用权,分别执行各自 ...

  3. Statement 和 PreparedStatement 有什么区别?哪个性 能更好?

    与 Statement 相比,①PreparedStatement 接口代表预编译的语句,它主要的优 势在于可以减少 SQL 的编译错误并增加 SQL 的安全性(减少 SQL 注射攻击的可 能性):② ...

  4. JVM-learning

    JVM是什么?? Java Virtual Mechine JRE(JavaRuntimeEnvironment,Java运行环境),也就是Java平台.所有的Java 程序都要在JRE下才能运行. ...

  5. JavaScript 焦点事件

    焦点事件,当一个元素(比如链接或表单)得到或失去焦点时发生. 实例: 1 <!DOCTYPE html> 2 <html lang="en"> 3 < ...

  6. kafka生产者网络层总结

    1 层次结构 负责进行网络IO请求的是NetworkClient,主要层次结构如下 ClusterConnectionStates报存了每个节点的状态,以node为key,以node的状态为value ...

  7. spring DAO 有什么用?

    Spring DAO 使得 JDBC,Hibernate 或 JDO 这样的数据访问技术更容易以一 种统一的方式工作.这使得用户容易在持久性技术之间切换.它还允许您在编写 代码时,无需考虑捕获每种技术 ...

  8. Django获取请求的IP地址

    if request.META.get('HTTP_X_FORWARDED_FOR'): ip = request.META.get("HTTP_X_FORWARDED_FOR") ...

  9. python学习笔记(一)——Python基础

    一.python 基础语法 python 的解释器在启动时会自动加载一个内建的模块,因此我们在使用 print().input()等函数时不用导入其他模块文件. 基本语法: 每条语句结尾没有分号 定义 ...

  10. formSelects

    formSelects-v4.js 链接:https://pan.baidu.com/s/1Qp-ez7CuA1cVdWhP37EA7Q  提取码:17iq只需要下文中的css文件和js文件引入到页面 ...