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

计算机考研复试上机07

14、数据结构

1)二叉树

1.常用操作
struct TreeNode{
	int data;
	TreeNode *leftChild;
	TreeNode *rightChild;
}; 
//前序遍历
void PreOrder(TreeNode *root){
	if(root == NULL) return;
	visit(root->data);
	PreOrder(root->leftChild);
	PreOrder(root->rightChild);
	return;
} 
//层序遍历 
void levelOrder(TreeNode *root){
	queue<TreeNode*> myQueue;
	if(root != NULL) myQueue.push(root);
	while(!myQueue.empty()){
		TreeNode *current = myQueue.front();
		myQueue.pop();
		visit(current->data);
		if(current->leftChild != NULL)
			myQueue.push(current->leftChild);
		if(current->rightChild != NULL)
			myQueue.push(current->rightChild);
	}
}
2.二叉树遍历(清华大学复试上机题)

题目描述:

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

#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(int &position, string str){
	char c = str[position++];
	if(c == '#') return NULL;
	TreeNode *root = new TreeNode(c);
	root->leftChild = Build(position,str);
	root->rightChild = Build(position, str);
	return root;
}

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

int main(){
	string str;
	while(cin>>str){
		int position = 0;
		TreeNode *root = Build(position, str);
		InOrder(root);
	}
	cout<<endl;
	return 0; 
}

2)二叉排序树

1.二叉排序树(华中科技大学复试上机题)

题目描述:

二叉排序树也称二叉查找树。它可以是一棵空树,也可以是一棵具有如下特性的非空二叉树:1. 若左子树非空,则左子树上所有结点的关键字值均不大于根结点的关键字值。2. 若右子树非空,则右子树上所有结点的关键字值均不小于根结点的关键字值。3. 左、右子树本身也是一棵二叉排序树。 现在给你 N 个关键字值各不相同的结点,要求你按顺序将它们插入一个初始为空树的二叉排序树,每次插入成功后,求相应父结点的关键字值,若没有父结点,则输出-1。

#include <bits/stdc++.h>
using namespace std;

struct TreeNode{
	int data;
	TreeNode *leftChild;
	TreeNode *rightChild;
	TreeNode(int x): data(x),leftChild(NULL),rightChild(NULL){}
};

TreeNode *insert(TreeNode *root,int x,int father){
	if(root == NULL){
		root = new TreeNode(x);
		cout<<father<<endl;
	}else if(x < root->data){
		root->leftChild = insert(root->leftChild,x,root->data);
	}else{
		root->rightChild = insert(root->rightChild,x,root->data);
	}
	return root;
}

int main(){
	int n;
	while(cin>>n){
		TreeNode *root = NULL;
		for(int i = 0;i < n;i++){
			int x;
			cin>>x;
			root = insert(root,x,-1);
		}
	}
	
	return 0; 
}

3)优先队列

1.常用操作
#include <bits/stdc++.h>
using namespace std;

int main(){
	priority_queue<int> queue;
	cout<<queue.size()<<endl;
	queue.push(20);
	queue.push(100);
	queue.push(30);
	queue.push(50);
	cout&

相关文章:

  • ES6箭头函数:基础与进阶指南
  • 红队内网攻防渗透:内网渗透之内网对抗:实战项目VPC1打靶PHP-RCE三层代理路由防火墙上线密码喷射域控提权
  • 请求go构建缓存,go clean -cache
  • 使用西门子 PLC(以 S7 - 1200 为例)编写梯形图程序来根据转速计算瞬时流量和累计流量的详细步骤
  • 0基础学Linux系统(准备1)
  • 沉浸式翻译插件深度评测:打破语言壁垒的黑科技利器
  • w223信息技术知识赛系统设计与实现
  • aws(学习笔记第二十九课) aws cloudfront hands on
  • Qwen-VL传统方法微调
  • 萝卜头笔作文赏析
  • CMMI评估的五个等级
  • ROS 2机器人开发--话题通信:订阅与发布
  • 52类110个主流Java组件和框架
  • SpringBoot实现异步调用的方法
  • 互联网医院系统源码解析:如何开发智能化的电子处方小程序?
  • 什么是方法
  • 大数据学习之PB级音乐数据中心数仓综合项目(1)-理论知识和项目需求、歌曲热度与歌手热度排行
  • Python天梯赛10分题-念数字、求整数段和、比较大小、计算阶乘和
  • 【数据结构初阶第十五节】堆的应用(堆排序 + Top-K问题)
  • MYSQL学习笔记(九):MYSQL表的“增删改查”
  • 前四月全国铁路完成固定资产投资1947亿元,同比增长5.3%
  • 欧盟委员会计划对950亿欧元美国进口产品采取反制措施
  • 首批证券公司科创债来了!拟发行规模超160亿元
  • 山东滕州车祸致6人遇难,肇事司机已被刑事拘留
  • 五一假期上海两大机场客流量超193万人次,创历年同期最高
  • 张国清赶赴贵州毕节黔西市指导游船倾覆事故应急救援救治工作