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

二叉树遍历(C语言版)

 前序遍历创建树,中序遍历把创建出来的二叉树的结点打印出来

题目链接:牛客网-二叉树遍历

    前序遍历创建树的思想:

    把每个结点看作是子树的根节点,以根左右的顺序创建一整棵二叉树

    1.空 返回空

    2.非空 先是malloc一个结点,作为根节点;然后让根的left指向左子树,让根的right指向右子树

    假设s为字符串,i为字符串数组下标;左子树可以通过root->left = Create(s, i)得到,右子树可以通过root->right = Create(s, i)得到,创建完整棵树(子树)以后,返回root(整棵树/整棵子树的根节点);由于递归的特性,这边得到的不是单一左节点or右节点,而是一整个子树

typedef struct BintreeNode
{char val;struct BintreeNode* left;struct BintreeNode* right;
}Tnode;Tnode* Create(char s[],int* i)
{if(s[*i] == '#') //空{(*i)++;return NULL;}//非空Tnode* root = (Tnode*)malloc(sizeof(Tnode));root->val = s[(*i)++];root->left = Create(s, i);root->right = Create(s, i);return root;
}

然后对创建出来的整棵树进行中序遍历(左根右),即能成功通过该题;此处需要注意的是,在主函数传参时,要传下标的地址,不然递归时会出现下标没有被保存下来的情况

全部代码:

#include <stdio.h>
#include<stdlib.h>
typedef struct BintreeNode
{char val;struct BintreeNode* left;struct BintreeNode* right;
}Tnode;Tnode* Create(char s[],int* i)
{if(s[*i] == '#') //空{(*i)++;return NULL;}//非空Tnode* root = (Tnode*)malloc(sizeof(Tnode));root->val = s[(*i)++];root->left = Create(s, i);root->right = Create(s, i);return root;
}void MidOrder(Tnode* root)//前序遍历
{if(root == NULL) return;MidOrder(root->left);printf("%c ",root->val);MidOrder(root->right);
}int main()
{char s[100];scanf("%s",s);int i = 0;Tnode* root = Create(s,&i); // 创建树,返回根节点MidOrder(root);return 0;
}

http://www.xdnf.cn/news/181495.html

相关文章:

  • 解决升级WIN11(WINSERVER2025)后 远程桌面内 部分内容 显示 花屏 替换文件
  • 【Luogu】动态规划六
  • Python中数据切片操作详解和代码示例
  • AI实战SEO关键词优化法
  • 【视频生成模型】通义万相Wan2.1模型本地部署和LoRA微调
  • 初中级前端面试全攻略:自我介绍模板、项目讲解套路与常见问答
  • LeetCode42_接雨水
  • 杭电oj(1010、1015、1241)题解
  • 【数据可视化-39】2009-2019年亚马逊50大畅销书数据集可视化分析
  • 迷你世界UGC3.0脚本Wiki世界模块管理接口 World
  • Mysql中隐式内连接和显式内连接的区别
  • (26)VTK C++开发示例 ---将点坐标写入PLY文件
  • linux:进程的替换
  • 大模型时代具身智能:从理论突破到产业落地的全链路解析
  • 自动伴随无人机说明文档
  • Netmiko 源码关键流程图
  • pytorch学习使用
  • 深入解析MyBatis-Plus中的lambdaUpdate与lambdaQuery
  • OpenCV 图形API(65)图像结构分析和形状描述符------拟合二维点集的直线函数 fitLine2D()
  • 文章记单词 | 第47篇(六级)
  • java map中的key区分大小写吗
  • ChatGPT与DeepSeek在科研论文撰写中的整体科研流程与案例解析
  • 【git】添加项目到已有gitee仓库
  • vue组件间通信
  • 蓝桥杯 9.生命之树
  • 【Multipath】dm软链接相关问题定位
  • 前端高频面试题day3
  • Python装饰器:函数增强的秘密武器
  • 使用ZXing开发安卓扫码功能
  • 【C++】C++11新特性(一)