`

c二叉树遍历--二叉链表递归实现

阅读更多
#include <stdio.h>
#include <stdlib.h>
typedef struct treeNode* Node;
typedef struct treeNode  Elem;
struct treeNode{
Node lChild,rChild;
int data;
};

typedef Node BTree;

void preOrderBTree(BTree tree);
void inOrderBTree(BTree tree);
void postOrderBTree(BTree tree);

void visitNode(Node node){
if(node == NULL){
printf("node is null , data not exists");
}
printf("%d   \t\t",node->data);
}

void createNode(Node* node,int data){
*node = (Node)malloc(sizeof(Elem));
(*node)->data= data;
(*node)->lChild = NULL;
(*node)->rChild = NULL;
}

void preOrderBTree(BTree tree){
if(tree != NULL){
visitNode(tree); //1.访问左节点
preOrderBTree(tree->lChild);//2.递归访问左子树
preOrderBTree(tree->rChild);//3.递归访问右子树
}
}

void inOrderBTree(BTree tree){
if(tree != NULL){
inOrderBTree(tree->lChild);//1.递归访问左子树
visitNode(tree); //2.访问左节点
inOrderBTree(tree->rChild);//3.递归访问右子树
}
}

void postOrderBTree(BTree tree){
if(tree != NULL){
postOrderBTree(tree->lChild);//1.递归访问左子树
postOrderBTree(tree->rChild);//2.递归访问右子树
visitNode(tree); //3.访问左节点
}
}


void main(){
//构建二叉树
BTree tree = NULL;
Node node1 = NULL;
Node node2 = NULL;
Node node3 = NULL;
Node node4 = NULL;
Node node5 = NULL;
Node node6 = NULL;
Node node7 = NULL;
Node node8 = NULL;
Node node9 = NULL;
Node node10 = NULL;
//初始化节点
createNode(&node1,2);
createNode(&node2,1);
createNode(&node3,3);
createNode(&node4,5);
createNode(&node5,8);
createNode(&node6,10);
createNode(&node7,2);
createNode(&node8,100);
createNode(&node9,20);
createNode(&node10,25);

//按照预定结构组装成书
node6->lChild = node9;
node6->rChild = node10;
node4->lChild = node7;
node5->rChild = node8;
node2->lChild = node4;
node2->rChild = node5;
node3->rChild = node6;
node1->lChild = node2;
node1->rChild = node3;
    tree = node1;

//先序遍历
preOrderBTree(tree);
printf("\n===============================================================\n");
//后序遍历
postOrderBTree(tree);
printf("\n===============================================================\n");
//中序遍历
inOrderBTree(tree);
//层级遍历
}
分享到:
评论

相关推荐

    二叉链表模拟先序、中序、后序、层次遍历

    二叉链表是一种数据结构,它模仿了二叉树的概念,但使用链式存储方式来组织节点。在二叉链表中,每个节点包含两个指向其他节点的指针,分别称为左孩子和右孩子。这样的设计使得二叉链表能够方便地进行多种遍历操作,...

    数据结构实验——二叉树的建立和遍历.zip

    1.采用二叉链表作为存储结构,创建一棵二叉树; 2.用递归及非递归算法对二叉树实现先序遍历; 3.用递归及非递归算法对二叉树实现中序遍历; 4.用递归及非递归算法对二叉树实现后序遍历。 5.用递归遍历算法中的访问...

    建立二叉树链表(非递归)C语言

    输入先序遍历和中序遍历序列,建立二叉树的二叉链表 (非递归算法) 自己写的程序呐,调试运行过,绝对能用哒~~!

    4.1_递归遍历.CPP

    以二叉链表为存储结构,实现二叉树的创建、先序、中序、后序递归遍历算法。 以二叉链表为存储结构,实现二叉树的创建、先序、中序、后序递归遍历算法。 以二叉链表为存储结构,实现二叉树的创建、先序、中序、后序...

    数据结构实验——二叉树

    以二叉链表作存储结构,试编写前序、中序、后序遍历二叉树的算法。

    python 数据结构 算法 LeetCode 牛客 面试 编程之美 动态规划 字典树 快速排序 树 字符串 数组 链表 全排列

    树 * 字典树 * 遍历-层次遍历 * 遍历-中序遍历-非递归 ...* 二叉查找树-从有序链表构造平衡的二叉查找树 * 二叉树-的最大深度 数组&字符串 查找排序 排列组合 动态规划 树 链表 数学 位运算 编程之美

    数据结构实验报告6-树-二叉树的遍历算法-实验内容及要求.docx

    本实验使用Visual C++环境进行开发,主要代码采用C语言实现,动态存储分配采用C++的`new`和`delete`操作符实现,输入与输出采用C++的`cin`和`cout`流,程序注释遵循C/C++规范。 ### 主要函数说明 - `BiTreeCrtBT()`...

    二叉链表的基本操作 构建 遍历 求深 叶数 结点数 销毁

    构建二叉链表可以采用递归或迭代的方式,例如,按照层次顺序或前序、中序、后序遍历的顺序插入元素。 2. **遍历**: 遍历是访问二叉链表中所有节点的过程,通常有三种主要方式: - **前序遍历**:先访问根节点,...

    数据结构第六章课件及建立二叉树的二叉链表存储结构汇总

    "构建二叉树的二叉链表存储结构.doc" 文件可能详细介绍了如何通过给定的节点顺序来创建二叉链表,这通常涉及到递归或栈的数据结构。递归方法通常用于前序遍历构建,而栈则适用于其他两种遍历方式。在构建过程中,...

    二叉链表叶子节点的输出

    根据给定的信息,本文将详细解释“二叉链表叶子节点的输出”这一主题,包括相关的数据结构定义、创建二叉树的过程、遍历方法以及如何统计并输出叶子节点的数量。 ### 一、数据结构定义 在C语言中,二叉树通常通过...

    二叉树的二叉链表存储表示

    "二叉树的二叉链表存储表示" 在计算机科学中,二叉树是一种重要的数据结构,它广泛应用于许多领域,如数据库、操作系统、编译器等。...二叉树的遍历和统计也可以使用递归的方式实现,提高了程序的效率和可读性。

    链表先序建立二叉树,得到中序后序输出,递归和非递归实现(C++代码加设计报告)

    在本课程设计中,我们将探讨如何使用C++编程语言来构建和操作二叉树,特别是通过先序遍历建立二叉树以及非递归方式实现中序遍历。这一过程涉及到了数据结构中的核心概念——二叉链表,以及递归和非递归算法的应用。 ...

    二叉树_二叉树遍历_

    1.二叉树的基本操作实现【问题描述】建立一棵二叉树,用递归方法实现二叉树的如下基本操作:(1)按先序序列构造一棵二叉链表表示的二叉树T;...ABCDEFG【选做内容】采用非递归算法实现二叉树遍历。

    数据结构 建立二叉树二叉链表存储结构实现有关操作 实验报告

    ### 数据结构:建立二叉树二叉链表存储结构实现有关操作 #### 一、实验题目及背景 本次实验的主要任务是通过建立二叉树的二叉链表存储结构来实现特定的操作。二叉树是一种重要的非线性数据结构,在计算机科学中有...

    二叉树先序中序后序递归非递归遍历并求高度

    (1)输入字符序列,建立二叉链表 (2)中序遍历二叉树:递归 (3)中序遍历二叉树:非递归 (3)二叉树高度

    二叉链表为存储结构二叉链表为存储结构.doc

    本文将详细介绍二叉链表的存储结构和基本操作,包括二叉链表的定义、基本操作的实现、递归算法和非递归算法的实现。 一、 二叉链表的存储结构 二叉链表是一种常用的数据结构,用于存储二叉树的信息。二叉链表的...

    基于二叉链表的二叉树实现.rar_data structure_二叉链表

    4. **遍历二叉树**:二叉链表支持前序遍历(根-左-右)、中序遍历(左-根-右)和后序遍历(左-右-根)。遍历方法通常采用递归或迭代的方式,按照特定顺序访问每个节点。 5. **平衡调整**:如果二叉树高度失衡,可能...

    二叉树遍历算法

    例如,编译器中的词法分析和语法分析就依赖于二叉树遍历,而游戏中的路径查找问题可以通过构建二叉搜索树并使用遍历算法来解决。 综上所述,二叉树遍历是理解数据结构和算法的基础,熟练掌握这三种遍历方法对提升...

    二叉树_C++_二叉树遍历_Vc_

    总的来说,这个项目涵盖了二叉树数据结构的核心概念和操作,包括二叉链表的实现、二叉树遍历算法的编写,以及二叉排序树的特定功能。这不仅是对C++编程能力的锻炼,也是对数据结构和算法理解的深入实践。

Global site tag (gtag.js) - Google Analytics