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

二叉搜索树Ⅱ【东北大学oj数据结构8-2】C++

编写一个程序,通过将查找操作添加到二叉搜索树 T 对二叉搜索树 T 执行以下操作:二叉搜索树 I。

插入k:将一个包含k的节点插入到T中。
find k:报告T是否有包含k的节点。
打印:分别通过中序树遍历和先序树遍历打印二叉搜索树的键。

输入
在第一行中,给出了操作数 m。在接下来的 m 行中,给出了由 insert k、find k 或 print 表示的操作。

输出
对于每个 find k 操作,如果 T 有一个包含 k 的节点,则打印“yes”,否则打印“no”。

另外,对于每个打印操作,分别打印一行中序树遍历和先序树遍历得到的key列表。在每个键之前放置一个空格字符。

约束

1≤ 操作次数≤500,000

1≤打印操作次数 ≤10

−2,000,000,000≤key≤2,000,000,000

如果使用上述伪代码,二叉树的高度不会超过 100。
二叉搜索树中的键都是不同的。

输入样例

10
insert 30
insert 88
insert 12
insert 1
insert 20
find 12
insert 17
insert 25
find 16
print

输出样例

yes
no
 1 12 17 20 25 30 88
 30 12 1 20 17 25 88

#include <iostream>
#include <stack>
#include <vector>
#include <string>
using namespace std;
 
// 定义树的节点结构
struct Node {
    int key;
    Node* right;
    Node* left;
    Node* p;
};
 
Node* creat(int a)
{
    Node* n=new Node();
    n->key=a;
    n->left=nullptr;
    n->right=nullptr;
    n->p=nullptr;
    return n;
}
 
Node* insertt(Node* root,Node* z)
{
    Node* y=nullptr;
    Node* x=root;
    while(x!=nullptr)
    {
        y=x;
        if(z->key<x->key)
            x=x->left;
        else
            x=x->right;
    }
    z->p=y;
    if(y==nullptr)
        root=z;
    else if(z->key<y->key)
        y->left=z;
    else
        y->right=z;
 
    return root;
}
 
void findd(Node* root,int k)
{
    while(root!=nullptr&&k!=root->key)
    {
        if(k<root->key)
            root=root->left;
        else
            root=root->right;
    }
    if(root)
        cout<<"yes"<<endl;
    else
        cout<<"no"<<endl;
}
 
void preorder(Node* a)
{
    if(a==nullptr) return;
    cout<<a->key<<" ";
    preorder(a->left);
    preorder(a->right);
}
void inorder(Node* a)
{
    if(a==nullptr) return;
    inorder(a->left);
    cout<<a->key<<" ";
    inorder(a->right);
}
 
int main() {
    int n;
    Node* tree=nullptr;
    cin>>n;
    for (int i = 0; i < n; i++) {
        string c;
        cin>>c;
        if(c=="insert")
        {
            int v;
            cin>>v;
            Node* newNode=creat(v);
            tree=insertt(tree,newNode);
        }
        if(c=="find")
        {
            int v;
            cin>>v;
            findd(tree,v);
        }
        if(c=="print")
        {
            inorder(tree);
            cout<<endl;
            preorder(tree);
            cout<<endl;
        }
    }
    return 0;
}

 


http://www.kler.cn/a/445539.html

相关文章:

  • 智能工厂的设计软件 三种处理单元(NPU/GPU/CPU)及其在深度学习框架中的作用 之4(百度文库答问 之2)
  • 【网络云计算】2024第51周-每日【2024/12/17】小测-理论-解析
  • YOLOv8全解析:高效、精准的目标检测新时代——创新架构与性能提升
  • Soul Android端稳定性背后的那些事
  • Ubuntu本地化安装MYSQL及Navicat
  • Message Processing With Spring Integration高级应用:自定义消息通道与端点
  • PDFMathTranslate - 基于AI的双语对照 PDF 翻译工具
  • Meta重磅发布Llama 3.3 70B:开源AI模型的新里程碑
  • 如何更改 maven 指定的 java 版本 set JAVA_HOME=C:\Program Files\Java\jdk1.8
  • Unity中对已经烘焙的物体进行复制却没有复制烘焙参数的处理
  • 【含开题报告+文档+PPT+源码】基于SpringBoot+Vue的校园勤工助学招聘系统的设计与实现
  • git暂存
  • 论文解读之Chain-of-Thought Prompting Elicits Reasoning in Large Language Models(CoT)
  • 【Spring框架 三】
  • 目标检测任务中根据真实坐标和预测坐标计算IOU
  • Halcon单相机+机器人=眼在手上#标定心得
  • css基础-认识css
  • 企业微信客户管理工具
  • JAVA安全之类加载器
  • 【操作系统】每日 3 题(七十)
  • 数据结构——常见数据结构和应用
  • 项目搭建+图片(添加+图片)
  • dolphinscheduler服务RPC框架源码解析(八)RPC提供者服务整合Spring框架实现
  • React-antd组件库 - 让Menu子菜单项水平排列 - 下拉菜单排序 - 自定义子菜单展示方式
  • 电商后台革命:RPA 自动化商品信息录入与更新【52rpa.com】
  • MongoDB常见面试题总结(上)