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

清华大学考研复试上机题之二叉树的遍历

问题描述:

编一个程序,读入用户输入的一串先序遍历字符串,根据此字符串建立一个二叉树(以指针方式存储)。

例如如下的先序遍历字符串:ABC##DE#G##F### 

其中#表示的是空格空格字符代表空树

建立起此二叉树以后,再对二叉树进行中序遍历,输出遍历结果

  • 示例 1:
输入:abc##de#g##f###
输出:c b e g d f a 

解题思路:

首先根据前序创建二叉树,再以中序输出。

定义i来当数组的下标,注意对i传参时要传i的地址(每次递归后返回的i不是同一个i)

根据前序,若读到’#‘,则返回NULL,下标++,若读到其他字符,就根据递归创建树的节点,创建的节点先赋给左子树,递归回来后再赋给右子树,以此类推不断递归即可。

接着根据中序输出创建的二叉树

代码如下:

#include<stdio.h>
#include<stdlib.h>
typedef struct TreeNode {struct TreeNode* left;struct TreeNode* right;char val;
}TNode;
TNode* CreateTree(char* a, int* pi)
{if (a[*pi] == '#'){(*pi)++;return NULL;}TNode* root = (TNode*)malloc(sizeof(TNode));if (root == NULL){printf("malloc fail\n");exit(-1);}root->val = a[*pi];(*pi)++;root->left = CreateTree(a, pi);root->right = CreateTree(a, pi);return root;
}
void InOrder(TNode* root)
{if (root == NULL)return;InOrder(root->left);printf("%c ", root->val);InOrder(root->right);
}
int main()
{char  str[100];scanf("%s", str);int i = 0;TNode* root = CreateTree(str, &i);InOrder(root);return 0;
}

小tip:

哈希曼树

贪心算法:将权值小的放在左子树上。

权值越大,路径越短,编码越短

权值越小,路径越长,编码越长

http://www.lryc.cn/news/260360.html

相关文章:

  • java全栈体系结构-架构师之路(持续更新中)
  • 【C语言】超详解strncpystrncatstrncmpstrerrorperror的使⽤和模拟实现
  • 【Spring Boot 】Spring Boot 常用配置总结
  • Day60力扣打卡
  • Axure的动态图使用以及说明
  • 力扣 | 437. 路径总和 III
  • 如何部署自己的服务渲染页面为Pdf文档
  • 常用的调试方法(段错误产生原因)
  • [云原生] Docker 入门指南:镜像、容器、卷和网络解析
  • 机器学习-聚类问题
  • leetcode9.回文数java解法
  • 图论专栏一《图的基础知识》
  • 得帆云为玉柴打造CRM售后服务管理系统,实现服务全过程管理|基于得帆云低代码的CRM案例系列
  • 智能优化算法应用:基于蝠鲼觅食算法3D无线传感器网络(WSN)覆盖优化 - 附代码
  • vue2 以及 vue3 自定义组件使用 v-model使用默认值以及自定义事件
  • 《PCL多线程加速处理》-滤波-统计滤波
  • 插入排序——直接插入排序和希尔排序(C语言实现)
  • 【Linux系统化学习】进程地址空间 | 虚拟地址和物理地址的关系
  • Navicat 技术指引 | 适用于 GaussDB 分布式的模型功能
  • 四十五、Redis主从
  • Spring源码学习一
  • 小红书种草和抖音传播区别是什么?
  • 论文阅读《Parameterized Cost Volume for Stereo Matching》
  • 解决nuxt3中vue3生命周期钩子onMounted不执行的问题
  • Win32 HIWORD和LOWORD宏学习
  • Axure官方软件安装、汉化保姆级教程(带官方资源下载)
  • qt-C++笔记之addAction和addMenu的区别以及QAction的使用场景
  • nodejs 管道通讯
  • k8s常用命令及示例(三):apply 、edit、delete
  • 前端页面显示的时间格式为:2022-03-18T01:46:08.000+00:00 如何转换为:年-月-日,并根据当前时间判断为几天前