当前位置: 首页 > news >正文

树的遍历(先,中,后)

顺序存储

#include <stdio.h>// 先序遍历 (根-左-右)
void preOrder(char tree[], int i, int size) {if (i < size && tree[i] != '\0') {printf("%c ", tree[i]);       // 访问根节点preOrder(tree, 2 * i, size);  // 访问左子树preOrder(tree, 2 * i + 1, size);  // 访问右子树}
}// 中序遍历 (左-根-右)
void inOrder(char tree[], int i, int size) {if (i < size && tree[i] != '\0') {inOrder(tree, 2 * i, size);   // 访问左子树printf("%c ", tree[i]);       // 访问根节点inOrder(tree, 2 * i + 1, size);  // 访问右子树}
}// 后序遍历 (左-右-根)
void postOrder(char tree[], int i, int size) {if (i < size && tree[i] != '\0') {postOrder(tree, 2 * i, size);     // 访问左子树postOrder(tree, 2 * i + 1, size); // 访问右子树printf("%c ", tree[i]);           // 访问根节点}
}int main() {// 假设二叉树的顺序存储,索引从1开始char tree[] = { '\0', 'A', 'B', 'C', 'D', 'E', 'F', 'G' };int size = sizeof(tree) / sizeof(tree[0]);printf("先序遍历: ");preOrder(tree, 1, size);printf("\n");printf("中序遍历: ");inOrder(tree, 1, size);printf("\n");printf("后序遍历: ");postOrder(tree, 1, size);printf("\n");return 0;
}

链式存储

#include <stdio.h>
#include <stdlib.h>typedef struct TreeNode {char data;                 // 数据域struct TreeNode* left;     // 左子节点指针struct TreeNode* right;    // 右子节点指针
} TreeNode;TreeNode* createNode(char data) {TreeNode* node = (TreeNode*)malloc(sizeof(TreeNode));node->data = data;node->left = NULL;node->right = NULL;return node;
}//先序
void preOrder(TreeNode* root) {if (root != NULL) {printf("%c ", root->data);  // 访问根节点preOrder(root->left);       // 访问左子树preOrder(root->right);      // 访问右子树}
}//中序
void inOrder(TreeNode* root) {if (root != NULL) {inOrder(root->left);        // 访问左子树printf("%c ", root->data);  // 访问根节点inOrder(root->right);       // 访问右子树}
}//后序
void postOrder(TreeNode* root) {if (root != NULL) {postOrder(root->left);      // 访问左子树postOrder(root->right);     // 访问右子树printf("%c ", root->data);  // 访问根节点}
}int main() {// 创建二叉树节点TreeNode* root = createNode('A');root->left = createNode('B');root->right = createNode('C');root->left->left = createNode('D');root->left->right = createNode('E');root->right->left = createNode('F');root->right->right = createNode('G');// 先序遍历printf("先序遍历: ");preOrder(root);printf("\n");// 中序遍历printf("中序遍历: ");inOrder(root);printf("\n");// 后序遍历printf("后序遍历: ");postOrder(root);printf("\n");return 0;
}


http://www.mrgr.cn/news/64092.html

相关文章:

  • 多线程编程初探:掌握基本概念与核心原理
  • 【驱动开发】设备分类、设备号申请和注销,注册和移除字符设备,以及一个基本的内核驱动程序框架代码
  • QT 控件定义为智能指针引发的bug
  • Excel将混乱的多行做成1列
  • 如何在 Linux 中设置 SSH 免密码登录
  • arm架构 uos操作系统离线安装k8s
  • 【无人机设计与控制】改进无人机三维路径规划(蜣螂优化算法)Matlab程序
  • 除甲醛开窗通风的正确方法 消除甲醛的最好方法
  • 如何引用一个已经定义过的全局变量?
  • 【含文档】基于ssm+jsp的智慧篮球馆预约(含源码+数据库+lw)
  • 【含文档】基于Springboot+Vue的工商局商家管理系统 (含源码数据库+LW)
  • 基于javaweb(springboot+mybatis)网站建设服务管理系统设计和实现以及文档报告设计
  • ssm毕业设计选题系统+jsp
  • HTML 基础标签——表格标签<table>
  • cangjie仓颉程序设计-怎么排序(二)
  • 从头开始学PHP之面向对象
  • 2025生物发酵展(济南)为生物制造产业注入新活力共谱行业新篇章
  • 仓颉刷题录-二维数组(二)
  • 第15届蓝桥杯省赛真题剖析-2024年8月24日Scratch中级组
  • 使用Github下载YOLO v5项目教程
  • 面试题:JVM(六)
  • TOP级AI驱动的单元测试工具推荐
  • 自由学习记录(17)
  • c 到 c++ 过渡
  • Spring源码学习(三):finishBeanFactoryInitialization
  • 亚马逊降佣刺激印度市场,中小卖家利好消息,测评助力扬帆起航