【中等】保研/考研408机试-二叉树相关

目录

一、基本二叉树

1.1结构

1.2前序遍历(注意三种遍历中Visit所在的位置)

1.2中序遍历

1.3后序遍历

二、真题实战

2.1KY11 二叉树遍历(清华大学复试上机题)【较难】

2.2KY212 二叉树遍历二叉树遍历(华中科技大学复试题)【中等】


一、基本二叉树

1.1结构

首先定义二叉树的结构

struct TreeNode{//数据类型 变量;char data;TreeNode *leftChild;  //左子树 TreeNode *rightChild; //右子树 TreeNode(char x) : data(x), leftChild(NULL), rightChild(NULL) {}
};

 关于建树,看玩遍历后看题解。

1.2前序遍历(注意三种遍历中Visit所在的位置

Visit是访问格式,比如print输出,不一定是函数

访问根节点-左子树-右子树,遍历过程可以想成逆时针。如图所示。

void PreOrder(TreeNode* root){if(root==NULL){return;}Visit(root->data);PreOrder(root->leftChild);PreOrder(root->rightChild);return ;
}

1.2中序遍历

左-中-右

void InOrder(TreeNode* root){if(root==NULL){return ;}InOrder(root->leftChild);Visit(root->data);InOrder(root->rightChild);return ;
}

1.3后序遍历

左-右-根

void PostOrder(TreeNode* root){if(root==NULL){return ;}PostOrder(root->leftChild);PostOrder(root->rightChild);Visit(root->data);return ;
}

1.4层次遍历

暂时没有遇到,先不更,需要用到 队列辅助更新。

二、真题实战

2.1KY11 二叉树遍历(清华大学复试上机题)【较难】

二叉树遍历_牛客题霸_牛客网

描述

编一个程序,读入用户输入的一串先序遍历字符串,根据此字符串建立一个二叉树(以指针方式存储)。 例如如下的先序遍历字符串: ABC##DE#G##F### 其中“#”表示的是空格,空格字符代表空树。建立起此二叉树以后,再对二叉树进行中序遍历,输出遍历结果。

输入描述:

输入包括1行字符串,长度不超过100。

输出描述:

可能有多组测试数据,对于每组数据, 输出将输入字符串建立二叉树后中序遍历的序列,每个字符后面都有一个空格。 每个输出结果占一行。

示例1

输入:

abc##de#g##f###

复制输出:

c b e g d f a 

总结:注意建立树的顺序和所需变量,root->leftChild或者root->rightChild的赋值。异常情况返回NULL,以及最后返回root。整体就是:确定结构-建树方法-遍历方法-主程序。

#include <bits/stdc++.h>
using namespace std;
struct TreeNode{//数据类型 变量;char data;TreeNode *leftChild;  //左子树 TreeNode *rightChild; //右子树 TreeNode(char x) : data(x), leftChild(NULL), rightChild(NULL) {}
};//建树 先序遍历 中-左-右 
TreeNode* PreBuild(int& index,string s ){char c=s[index];index++;if(c=='#'){return NULL;}TreeNode* root=new TreeNode(c);root->leftChild=PreBuild(index,s);root->rightChild=PreBuild(index,s);return root;
}void InOrder(TreeNode* root){if(root==NULL){return ;}InOrder(root->leftChild);cout<<root->data<<" ";InOrder(root->rightChild);return ;
}int main() {string s;while(cin>>s){int index=0;TreeNode* root=PreBuild(index,s);InOrder(root);}return 0;
}

2.2KY212 二叉树遍历二叉树遍历(华中科技大学复试题)【中等】

二叉树遍历_牛客题霸_牛客网

描述

二叉树的前序、中序、后序遍历的定义: 前序遍历:对任一子树,先访问根,然后遍历其左子树,最后遍历其右子树; 中序遍历:对任一子树,先遍历其左子树,然后访问根,最后遍历其右子树; 后序遍历:对任一子树,先遍历其左子树,然后遍历其右子树,最后访问根。

给定一棵二叉树的前序遍历和中序遍历,求其后序遍历(提示:给定前序遍历与中序遍历能够唯一确定后序遍历)。

输入描述:

两个字符串,其长度n均小于等于26。 第一行为前序遍历,第二行为中序遍历。 二叉树中的结点名称以大写字母表示:A,B,C....最多26个结点。

输出描述:

输入样例可能有多组,对于每组测试样例, 输出一行,为后序遍历的字符串。

示例1

输入:

ABC
BAC
FDXEAG
XDEFAG

复制输出:

BCA
XEDGAF

总结:我感觉这个建树比上一个难许多,整道题就是考察建树。

根据先序遍历的性质,第一个节点就是根节点,根据这个入手。(做题时一定要结合数据结构的特性) 

再根据中序遍历的性质,找到根节点索引位置的话,左边的就是左子树,右边的就是右子树。再递归处理。

这个根节点索引位置前序遍历字符串中序遍历字符串都能用,都是分块节点。

递归停止的标志就是先序遍历字符串长度为0,返回NULL(空节点)

函数解释:sub = str.substr(7, 5); // 从索引为7的位置提取长度为5的子字符串

sub = str.substr(7);代表从索引7开始到末尾的所有字符串 。

#include<bits/stdc++.h>
using namespace std;
struct TreeNode{char data;TreeNode* leftChild;TreeNode* rightChild;TreeNode(char c):data(c),leftChild(NULL),rightChild(NULL){}
};
TreeNode* Build(string s1,string s2){if(s1.size()==0){return NULL;}char c=s1[0];TreeNode* root=new TreeNode(c);int index=s2.find(c);root->leftChild=Build(s1.substr(1,index),s2.substr(0,index));root->rightChild=Build(s1.substr(index+1),s2.substr(index+1));return root; 
}void PostOrder(TreeNode* root){if(root==NULL){return;}PostOrder(root->leftChild);PostOrder(root->rightChild);cout<<root->data;return ;
}int main() 
{string s1,s2,s3,s4;cin>>s1>>s2>>s3>>s4;TreeNode* root=Build(s1,s2);PostOrder(root);cout<<endl;TreeNode* root2=Build(s3,s4);PostOrder(root2);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/543771.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[蓝桥杯练习题]确定字符串是否包含唯一字符/确定字符串是否是另一个的排列

确定字符串是否包含唯一字符 #include<bits/stdc.h> using namespace std; int main(){ios::sync_with_stdio(0);cin.tie(nullptr);cout.tie(nullptr);map<char,int>m;string s;cin>>s;for(int i0;i<s.size();i){if(isalpha(s[i]))s[i]tolower(s[i]);if(…

电机参数辨识算法(2)——基于高频注入的磁链辨识策略

电机参数辨识算法&#xff08;1&#xff09;——基于高频注入的电感辨识策略-CSDN博客https://blog.csdn.net/m0_46903653/article/details/136722750?spm1001.2014.3001.5501上一期已经讲过了电感辨识方法。 今天这是参数辨识的第二期&#xff0c;今天来简单看看磁链的辨识。…

torch.nn.Conv2d()与slim.conv2d()函数参数详解

目录 1. tf.nn.conv2d()函数1.1 input&#xff1a;1.2 filter&#xff1a;1.3 strides&#xff1a;1.4 padding&#xff1a; 2.tf.contrib.slim.conv2d()函数3. torch.nn.Conv2d()函数3.1 官方例子&#xff1a; 1. tf.nn.conv2d()函数 tensorflow构建网络模型时常用的卷积函数…

Redis应用与原理(一)

更好的阅读体验 \huge{\color{red}{更好的阅读体验}} 更好的阅读体验 缓存发展史 缓存经典场景 在没有引入缓存前&#xff0c;为了应对大量流量&#xff0c;一般采用&#xff1a; LVS 代理Nginx 做负载均衡搭建 Tomcat 集群 这种方式下&#xff0c;随着访问量的增大&#xf…

虚拟机网络链接

在虚拟网络设置中找到如下界面&#xff1a; "子网 IP" 192.168.79.0/24 表示一个局域网络&#xff0c;它有254个可能的IP地址可供分配&#xff08;192.168.79.1到192.168.79.254&#xff09;&#xff0c;255.255.255.0 是子网掩码&#xff0c;定义了网络和主机部分。…

PXVDI企业级PVE免费桌面虚拟化部署教程ProxmoxVE

什么是PXVDI&#xff1f; PXVDI是一款基于Proxmox VE为底层的可商用的免费云桌面套件。对熟悉PVE的人来说&#xff0c;这点非常的点赞。首先是PVE是免费的&#xff0c;其次PVE的免费云桌面方案也极为少数。 根据官方提出的价格清单&#xff0c;免费版和商业版在功能上主要的区…

数字万用表 (Digital Multimeter)

数字万用表 [Digital Multimeter] 1. Product parameters2. 交流频率测量3. 面板介绍4. 背光屏References 1. Product parameters 2. 交流频率测量 在交流 750V 档处按 HOLD 键切换到市电频率 3. 面板介绍 4. 背光屏 ​ References [1] Yongqiang Cheng, https://yongqiang…

小红书获得小红书商品详情 API 返回值说明

小红书&#xff08;Xiaohongshu&#xff09;的商品详情API返回值通常包含与商品相关的各种信息&#xff0c;以帮助开发者或商家获取和使用商品数据&#xff0c;获取调用链接详情 item_get-获得小红书商品详情 smallredbook.item_get 公共参数 请求参数 请求参数&#xff1a;…

想兼职赚钱?盘点6个靠谱兼职,赚钱更轻松!

1&#xff0c;微头条搬砖 微头条搬砖是一个门槛不高的赚钱方式&#xff0c;而且不需要你有多么好的原创能力&#xff0c;去收集一些热门文章的素材进行文章伪原创&#xff0c;十分钟就能搞定&#xff0c;只要你的文章有爆点&#xff0c;足够吸人眼球&#xff0c;就能够获取不低…

三. 操作系统 (6分) [理解|计算]

🌟三. 操作系统 (6分) [理解|计算] PV操作, 分页存储管理, 文件的索引, 位示图 考试重点 文章目录 🌟三. 操作系统 (6分) [理解|计算]==PV操作, 分页存储管理, 文件的索引, 位示图 考试重点==3.1 进程管理3.2 存储管理3.3 设备管理3.4 文件管理3.1 进程管理 进程的特征 进…

世界环境绩效指数EPI数据集(2000-2022年)

环境绩效指数&#xff08;EPI&#xff09;是由耶鲁大学和哥伦比亚大学联合发布的一项综合指标&#xff0c;旨在衡量世界各国在可持续环境管理方面的表现。覆盖2000年至2022年&#xff0c;EPI通过分析各国在多个维度上的环境政策执行成效&#xff0c;包括空气质量、水资源管理、…

武汉灰京文化:直播游戏新时代的游戏宣传方式

随着互联网和科技的迅速发展&#xff0c;游戏产业也日益繁荣。传统的游戏宣传方式逐渐显现出一些不足&#xff0c;传统的广告渠道和媒体报道在一定程度上已经不能满足游戏行业的需求。然而&#xff0c;随着直播平台的兴起&#xff0c;直播游戏成为了一种新的游戏宣传方式&#…