数据结构_C语言_二叉树先序、中序、后序遍历

# 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语言_二叉树先序、中序、后序遍历的更多相关文章
- 分别求二叉树前、中、后序的第k个节点
一.求二叉树的前序遍历中的第k个节点 //求先序遍历中的第k个节点的值 ; elemType preNode(BTNode *root,int k){ if(root==NULL) return ' ...
- 数据结构_C语言_单链表
# include <stdio.h> # include <stdbool.h> # include <malloc.h> typedef int DataTyp ...
- 选择排序_C语言_数组
选择排序_C语言_数组 #include <stdio.h> void select_sort(int *); int main(int argc, const char * argv[] ...
- 插入排序_C语言_数组
插入排序_C语言_数组 #include <stdio.h> void insertSort(int *); int main(int argc, const char * argv[]) ...
- 快速排序_C语言_数组
快速排序_C语言_数组 #include <stdio.h> void quickSort(int *, int, int); int searchPos(int *, int, int) ...
- 冒泡排序_C语言_数组
冒泡排序_C语言_数组 #include <stdio.h> //冒泡排序 小->大 void sort(int * pArray, int len); int main(int a ...
- 前、中、后序遍历随意两种是否能确定一个二叉树?理由? && 栈和队列的特点和区别
前序和后序不能确定二叉树理由:前序和后序在本质上都是将父节点与子结点进行分离,但并没有指明左子树和右子树的能力,因此得到这两个序列只能明确父子关系,而不能确定一个二叉树. 由二叉树的中序和前序遍历序列 ...
- [Java]算术表达式求值之二(中序表达式转后序表达式方案,支持小数)
Inlet类,入口类,这个类的主要用途是验证用户输入的算术表达式: package com.hy; import java.io.BufferedReader; import java.io.IOEx ...
- [Java]算术表达式求值之一(中序表达式转后序表达式方案)
第二版请见:https://www.cnblogs.com/xiandedanteng/p/11451359.html 入口类,这个类的主要用途是粗筛用户输入的算术表达式: package com.h ...
随机推荐
- windows服务器下frp实现内网穿透
一.操作步骤 1.服务器:首先在服务器上解压到相应目录并配置frps.ini文件如下: 2.服务器:按下windows+R输入cmd进入命令窗口,进入到安装目录下运行frps.exe -c frps. ...
- List、Set、Map 和 Queue 之间的区别?
List 是一个有序集合,允许元素重复.它的某些实现可以提供基于下标值的常量 访问时间,但是这不是 List 接口保证的.Set 是一个无序集合.
- HTML 5中的输出元素是什么?
当你需要计算两个输入的结果并将结果放到一个标签里的时候,就需要输出元素了.比如你有两个文本框(参见下图),你想要让这些文本框数字相加,然后输出给标签. 下面就是如何使用HTML 5代码输出元素. &l ...
- 数仓建模—OneID
今天是我在上海租房的小区被封的第三天,由于我的大意,没有屯吃的,外卖今天完全点不到了,中午的时候我找到了一包快过期的肉松饼,才补充了1000焦耳的能量.但是中午去做核酸的时候,我感觉走路有点不稳,我看 ...
- -> 在c语言中是什么意思?
->在C语言中称为间接引用运算符,是二目运算符,优先级同成员运算符".".用法:p->a,其中p是指向一个结构体的指针,a是这个结构体类型的一个成员.表达式p-> ...
- 4.1 ROS元功能包
4.1 ROS元功能包 场景:完成ROS中一个系统性的功能,可能涉及到多个功能包,比如实现了机器人导航模块,该模块下有地图.定位.路径规划...等不同的子级功能包.那么调用者安装该模块时,需要逐一的安 ...
- 你不需要基于 CSS Grid 的栅格布局系统
在过去的几个星期里,我开始看到基于 CSS Grid 的布局框架和栅格系统的出现.我们惊讶它为什么出现的这么晚.但除了使用 CSS Grid 栅格化布局,我至今还没有看到任何框架能提供其他有价值的东西 ...
- Idea运行时Scala报错Exception in thread "main" java.lang.NoSuchMethodError:com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;Ljava/lang/Object;)V
一.情况描述 使用idea +scala+spark,运行程序代码如下: package cn.idcast.hello import org.apache.spark.rdd.RDD import ...
- C#编写一个控制台应用程序,可根据输入的月份判断所在季节
编写一个控制台应用程序,可根据输入的月份判断所在季节 代码: using System; using System.Collections.Generic; using System.Linq; us ...
- SpringMVC 配置和请求方式
SpringMVC 总结内容 一.什么是 Spring MVC ? Spring MVC 是 Spring 对 MVC 思想的实现(三层架构) 优点: 二.前端控制器 Spring MVC 中的前端控 ...