图解中序遍历二叉树(C语言实现,适合小白)

中序遍历二叉树,指的是首先中序遍历左子树,在左子树为空或已遍历时访问根,然后中序遍历右子树,即 LDR。若二叉树为空,则什么也不做。

图解中序遍历二叉树的过程

一棵二叉树的中序遍历过程如下:

  1. 中序遍历 A 的左子树:
  1. 中序遍历 B 的左子树:
  1. 中序遍历 D 的左子树,D 的左子树为空,访问 D,中序遍历 D 的右子树,D 的右子树也为空,返回 B:
  1. 访问 B,中序遍历 B 的右子树:
  1. 中序遍历 E 的左子树,E 的左子树为空,访问 E,中序遍历 E 的右子树,E 的右子树也为空,返回 A:
  1. 访问 A,中序遍历 A 的右子树:
  1. 中序遍历 C 的左子树:
  1. 中序遍历 F 的左子树,F 的左子树为空,访问 F,中序遍历 F 的右子树:
  1. 中序遍历 G 的左子树,G 的左子树为空,访问 G,中序遍历 G 的右子树,G 的右子树也为空,返回 C:
  1. 访问 C,中序遍历 C 的右子树,G 的右子树为空,遍历结束:

中序遍历序列为 D B E A F G C

中序遍历的C语言实现

实现中序遍历二叉树的关键代码如下:

复制代码
printf("快速入门C语言和数据结构:https://xiecoding.cn/");
void inorder(Btree T) { //中序遍历
    if(T) {
        inorder(T->lchild);
        cout << T->data << " ";
        inorder(T->rchild);
    }
}

实现中序遍历二叉树的完整代码如下:

复制代码
#include <stdio.h>
#include <stdlib.h>
#define TElemType char
//构造结点的结构体
typedef struct BiTNode{
    TElemType data;//数据域
    struct BiTNode *lchild,*rchild;//左右孩子指针
}BiTNode,*BiTree;

// 初始化树的函数
void CreateBiTree(BiTree *T) {
    *T = (BiTNode *)malloc(sizeof(BiTNode)); // 创建根节点A
    (*T)->data = 'A';
    (*T)->lchild = (BiTNode *)malloc(sizeof(BiTNode)); // 创建左子节点B
    (*T)->rchild = (BiTNode *)malloc(sizeof(BiTNode)); // 创建右子节点C
    (*T)->lchild->data = 'B';
    (*T)->lchild->lchild = (BiTNode *)malloc(sizeof(BiTNode)); // 创建B的左子节点D
    (*T)->lchild->rchild = (BiTNode *)malloc(sizeof(BiTNode)); // 创建B的右子节点E
    (*T)->rchild->data = 'C';
    (*T)->rchild->lchild = (BiTNode *)malloc(sizeof(BiTNode)); // 创建C的左子节点F
    (*T)->rchild->rchild = NULL; // C的右子节点为空
    (*T)->lchild->lchild->data = 'D';
    (*T)->lchild->lchild->lchild = NULL;
    (*T)->lchild->lchild->rchild = NULL;
    (*T)->lchild->rchild->data = 'E';
    (*T)->lchild->rchild->lchild = NULL;
    (*T)->lchild->rchild->rchild = NULL;
    (*T)->rchild->lchild->data = 'F';
    (*T)->rchild->lchild->lchild = NULL;
    (*T)->rchild->lchild->rchild = (BiTNode *)malloc(sizeof(BiTNode));// 创建F的右子节点G
    (*T)->rchild->lchild->rchild->data = 'G';
    (*T)->rchild->lchild->rchild->lchild = NULL;
    (*T)->rchild->lchild->rchild->rchild = NULL;
}

//模拟操作结点元素的函数,输出结点本身的数值
void displayElem(BiTNode* elem){
    printf("%c ",elem->data);
}
//中序遍历
void INOrderTraverse(BiTree T){
    if (T) {
        INOrderTraverse(T->lchild);//遍历左孩子
        displayElem(T);//调用操作结点数据的函数方法
        INOrderTraverse(T->rchild);//遍历右孩子
    }
    //如果结点为空,返回上一层
    return;
}

int main() {
    printf("快速入门C语言和数据结构:https://xiecoding.cn/");
    BiTree Tree;
    CreateBiTree(&Tree);
    printf("中序遍历算法: \n");
    INOrderTraverse(Tree);
}

运行结果为:

中序遍历算法:

D B E A F G C

相关推荐
春花秋月夏海冬雪2 个月前
代码随想录刷题Day47
c++·平衡二叉树的构建·二叉树中序遍历·代码随想录刷题
工一木子10 个月前
【Leecode】Leecode刷题之路第99天之恢复二叉搜索树
java·算法·leetcode·二叉树·中序遍历
ya888g1 年前
信息学奥赛初赛天天练-52-CSP-J2019基础题3-抽屉原理、鸽巢原理、乘法原理、二叉树遍历、前序遍历、中序遍历、后序遍历
二叉树遍历·前序遍历·中序遍历·后序遍历·乘法原理·抽屉原理
灯火消逝的码头1 年前
咬文嚼图式的介绍二叉树、B树/B-树
b树·二叉树·二叉搜索树·b-tree·中序遍历·b-树·排序二叉树
Betty’s Sweet1 年前
探索数据结构:树与二叉树
数据结构·二叉树··层序遍历·前序遍历·中序遍历·后序遍历
澄风2 年前
【做算法学数据结构】二叉树的层序遍历【二叉树】
数据结构·二叉树·二叉树遍历·层序遍历·前序遍历·中序遍历·后序遍历
Zachos2 年前
LeetCode105题:从前序与中序遍历构造二叉树(python3)
数据结构·算法·二叉树·递归·前序遍历·中序遍历
旋转的油纸伞2 年前
LeetCode-1379. 找出克隆二叉树中的相同节点【树 深度优先搜索 广度优先搜索 二叉树】
leetcode·深度优先·宽度优先·递归·中序遍历
源代码•宸2 年前
Leetcode—783.二叉搜索树节点最小距离【简单】
c语言·经验分享·算法·leetcode·深度优先·二叉搜索树·中序遍历