//树的遍历--递归遍历
#include<stdio.h>
#include<stdlib.h>
#include<string.h>typedef struct _TreeNode{//数据域char data;//指针域struct _TreeNode * leftchild;//左孩子指针struct _TreeNode * rightchild;//右孩子指针
}TreeNode, *TreeNodePointer;//先序遍历void PrintRoot(TreeNodePointer root){if (root!=NULL){//访问根节点printf("%c", root->data);//访问左子树PrintRoot(root->leftchild);//访问右子树PrintRoot(root->rightchild);}
}//中序遍历
void PrintRoot2(TreeNodePointer root){if (root != NULL){//访问左子树PrintRoot2(root->leftchild);//访问根节点printf("%c", root->data);//访问右子树PrintRoot2(root->rightchild);}
}//后序遍历
void PrintRoot3(TreeNodePointer root){if (root != NULL){//访问左子树PrintRoot3(root->leftchild);//访问右子树PrintRoot3(root->rightchild);//访问根节点printf("%c", root->data);}
}void Test2(){//定义结构体对象TreeNodePointer t1 = NULL, t2 = NULL, t3 = NULL, t4 = NULL, t5 = NULL;t1 = (TreeNodePointer)malloc(sizeof(TreeNode));if (t1 == NULL){printf("分配内存失败!");goto END;}//初始化数据memset(t1, 0, sizeof(TreeNode));t2 = (TreeNodePointer)malloc(sizeof(TreeNode));if (t2 == NULL){printf("分配内存失败!");goto END;}//初始化数据memset(t2, 0, sizeof(TreeNode));t3 = (TreeNodePointer)malloc(sizeof(TreeNode));if (t3 == NULL){printf("分配内存失败!");goto END;}//初始化数据memset(t3, 0, sizeof(TreeNode));t4 = (TreeNodePointer)malloc(sizeof(TreeNode));if (t4 == NULL){printf("分配内存失败!");goto END;}//初始化数据memset(t4, 0, sizeof(TreeNode));t5 = (TreeNodePointer)malloc(sizeof(TreeNode));if (t5 == NULL){printf("分配内存失败!");goto END;}//初始化数据memset(t5, 0, sizeof(TreeNode));//填充数据域t1->data = 'A';t2->data = 'B';t3->data = 'C';t4->data = 'D';t5->data = 'E';//建立树之间的关系t1->leftchild = t2;t1->rightchild = t3;t2->leftchild = t4;t2->rightchild = NULL;t3->leftchild = t5;t3->rightchild = NULL;// t5是t4的左孩子t4->leftchild = NULL;t4->rightchild = NULL;//t5没有孩子节点t5->leftchild = NULL;t5->rightchild = NULL;//递归遍历树printf("先序遍历\n");PrintRoot(t1);printf("\n");printf("中序遍历\n");PrintRoot2(t1);printf("\n");printf("后序遍历\n");PrintRoot3(t1);END:if (t1 != NULL){free(t1);t1 = NULL;}if (t2 != NULL){free(t2);t2 = NULL;}if (t3 != NULL){free(t3);t3 = NULL;}if (t4 != NULL){free(t4);t4 = NULL;}if (t5 != NULL){free(t5);t5 = NULL;}
}void main(){Test2();printf("\n");system("pause");
}

转载于:https://www.cnblogs.com/zhanggaofeng/p/5724903.html

数据结构 树的遍历(递归遍历)相关推荐

  1. 简述数据字典的结构及其作用_数据结构——树基本概念及其遍历

    树 1.概念 树结构是一种描述非线性层次关系的数据结构 在一个数结构中,有且仅有一个结点没有直接前驱,这个结点就是树的结点. 除根结点外,其余每个结点有且仅有一个直接前驱. 每个结点可以有任意多个直接 ...

  2. 【数据结构】--- 二叉树的递归遍历和非递归遍历【C语言实现】

    目录 1. 创建一颗二叉树 2.递归前序遍历二叉树 3.递归中序遍历二叉树 4.递归后序遍历二叉树 5. 测试递归打印二叉树代码 6. 非-递归前序遍历二叉树 7. 非-递归实现中序遍历二叉树 8.  ...

  3. mysql 遍历二叉树_数据结构——树与二叉树的遍历

    目录 树 二叉树 二叉树的遍历 总结 参考资料 序 树是学习数据结构的时候非常重要的一个数据结构,尤其是二叉树更为重要.像Java的HashMap 就使用了红黑树,而Mysql的索引就使用到了B+树. ...

  4. 数据结构-二叉树的非递归遍历

    前面的章节我们实现了二叉树最基本的遍历方式:递归遍历,代码是如此的简洁:辣么我们为什么还要去学习二叉树的非递归遍历方式呢?众所周知,递归优点是将可以将复杂的问题简单化即大问题拆分成一个个小问题,那么它 ...

  5. 【数据结构-树】2.二叉树遍历与线索二叉树(图解+代码)

    一.二叉树的定义及其主要特征 1.1 二叉树的概念 二叉树是另一种树形结构,其特点是每个结点最多含两棵子树(也就是说,二叉树的度≤2). 二叉树是一种有序树,若将其左.右子树颠倒,则成为另一颗不同的二 ...

  6. 数据结构_二叉树非递归遍历

    package zz;import java.util.Stack;/*** 二叉树中的二叉搜索树,即一个节点的左子节点关键值小于这个节点,右子节点的关键值大于这个节点* * @author Admi ...

  7. 数据结构与算法 3:二叉树,遍历,创建,释放,拷贝,求高度,面试,线索树

    [本文谢绝转载,原文来自http://990487026.blog.51cto.com] 树 数据结构与算法 3:二叉树,遍历,创建,释放,拷贝,求高度,面试,线索树二叉树的创建,关系建立二叉树的创建 ...

  8. 树的递归与非递归遍历算法

    树的递归与非递归遍历算法 树的递归与非递归遍历算法 树的遍历 实例 树遍历的口诀 树的递归遍历代码 树的先序遍历 树的中序遍历 树的后序遍历 递归遍历思想 树的非递归遍历 树的先序非递归遍历 先序遍历 ...

  9. 【数据结构】 实验报告10 顺序、链式存储结构的二叉树递归遍历、层次遍历求高度

    一.实验目的和要求 (源码在最后) 要求: 两种及以上存储结构(建议 顺序存储结构和链式存储结构各一).两种及以上方法(建议 递归遍历和层次遍历方法各一).分析各代码性能. 抽象数据类型(二叉树)独立 ...

最新文章

  1. 安装没有在R包仓库CRAN上托管的R包
  2. 不止 JDK7 的 HashMap ,JDK8 的 ConcurrentHashMap 也会造成 CPU 100%?原因与解决~
  3. 自己在项目设计和开发的一些总结
  4. ESP32 开发之旅② Arduino For ESP32说明
  5. Impala内存优化
  6. AndroidStudio打开的Gradle项目不识别成相应文件,gradle无响应
  7. vs 和 rider 一决高下 结合开发dotnet应用
  8. 5.MySQL常用函数
  9. Axure原型设计介绍
  10. java 枚举 中文_JAVA枚举类的简单使用
  11. 微信开发平台和微信公众平台绑定
  12. 路由器与交换机的区别是什么
  13. Andriod 获取手机CPU型号设备信息
  14. Anaconda安装labelImg图像标注软件
  15. excel 作图-- 主次纵坐标轴 横坐标名称太长
  16. 怪物猎人GU-武器派生整理之双刀篇
  17. 大数据之路系列之Linux命令(01)
  18. 苹果软件更新在哪里_【软件资讯】苹果发布 iOS 13.3.1 / iPadOS 13.3.1 正式版更新...
  19. 大学生的期望落差在哪里?——转帖newsmth
  20. 安网路由器 静态IP和PPOE混用时,如果设置了路由器定时重启可能导致路由器罢工...

热门文章

  1. 【吐血整理】java正则表达式详解
  2. Android开发究竟该如何学习,附架构师必备技术详解
  3. 【机器学习】Apriori 算法进行关联分析和FP-growth算法
  4. python生成斐波那契_python学习-生成器(generator)及斐波那契;yield
  5. php 3个循环,For循环只发布数组的前3个元素 - PHP(For loop is only posting first 3 elements of array - PHP)...
  6. python创造者_python 设计模式-建造者模式
  7. 网络推广软文浅谈网站优化过程中图片的优化技巧和注意事项!
  8. 网站推广下吉利关联公司公开“车辆故障预测方法”将在事故发生前预警
  9. 特斯拉“刹车失灵”不绝于耳网络营销外包怎样看特斯拉进驻中国?
  10. 网站推广期间出现排名异常网站推广专员应如何应对?