首页 > 编程语言 >KY124 二叉搜索树C++

KY124 二叉搜索树C++

时间:2024-01-24 21:38:24浏览次数:37  
标签:right r1 r2 tree C++ 二叉 KY124 now left

先把BST建立起,然后递归遍历判断树就好了。

#include<iostream>
#include<string>
using namespace std;

struct node{
    char data;
    struct node* left;
    struct node* right;
};
typedef struct node tree;

tree* build(string s){
    int i=0;
    tree* root=NULL;
    while(i<s.size()){
        tree* tem= new tree;
        tem->data=s[i];
        tem->left=NULL;
        tem->right=NULL;
        if(!root){
            root=tem;
        }else{
            tree* pre=root;
            tree* now=root;
            int tag=0;
            while(now){
                pre=now;
                if(s[i]-'0'>now->data-'0'){
                    now=now->right;
                    tag=1;
                }else{
                    now=now->left;
                    tag=0;
                }
            }
            if(tag==0){
                pre->left=tem;
            }else{
                pre->right=tem;
            }
        }
        i++;
    }
    return root;
}

bool judge(tree* r1,tree* r2){
    if(!r1&&!r2) return true;
    if(r1->data!=r2->data) return false;
    if(!r1->left&&r2->left||r1->left&&!r2->left||r1->right&&!r2->right||!r1->right&&r2->right) {
        return false;
    }
    return judge(r1->left,r2->left)&judge(r1->right,r2->right);
}
int main(){
    int n;
    while(cin >> n){
        if(n==0) break;
        string s;
        cin >> s;
        while(n!=0){
            string s1;
            cin >> s1;
            tree* h1 =build(s);
            tree* h2 =build(s1);
            if(judge(h1,h2)){
                cout <<"YES" <<'\n';
            }else{
                cout <<"NO" <<'\n';
            }
            n--;
        }
    }
    return 0;
}

结果:

标签:right,r1,r2,tree,C++,二叉,KY124,now,left
From: https://www.cnblogs.com/llllmz/p/17985868

相关文章

  • 33_把二叉搜索树转换为累加树
    538.把二叉搜索树转换为累加树给出二叉搜索树的根节点,该树的节点值各不相同,请你将其转换为累加树(GreaterSumTree),使每个节点node的新值等于原树中大于或等于node.val的值之和。提醒一下,二叉搜索树满足下列约束条件:节点的左子树仅包含键小于节点键的节点。节点的右子......
  • KY207 二叉排序树C++
    考二叉搜索树的插入。#include<iostream>usingnamespacestd;structnode{intdata;structnode*left;structnode*right;};typedefstructnodetree;intmain(){intn;while(cin>>n){tree*root=NULL;while(n!=0......
  • KY11 二叉树遍历C++
    这个题目思路其实就是先序遍历的变形。相当于沿着先序遍历的顺序跟着构建二叉树就行。然后中序遍历这个树。#include<iostream>#include<string>usingnamespacestd;structtnode{chardata;structtnode*left;structtnode*right;};typedefstructt......
  • KY212 二叉树遍历C++
    思路是先构造出树,然后在后序遍历整个树。#include<iostream>#include<string>usingnamespacestd;structTnode{chardata;structTnode*left;structTnode*right;};typedefstructTnodeTree;Tree*build(stringpre,inth1,intt1,stringin,inth2......
  • C++ STL Template Traits 技术
    C++的traits技术,是一种约定俗称的技术方案,用来为同一类数据(包括自定义数据类型和内置数据类型)提供统一的类型名(traits),这样可以统一的操作函数,例如advance(),swap(),encode()/decode()等。问题描述首先来看traits技术可以解决什么问题,我们拥有自定义类型Foo,Bar,以及编译......
  • 【C++入门到精通】C++入门 —— 深浅拷贝函数
     目录拷贝函数浅拷贝拷贝构造函数深拷贝拷贝构造函数总结 前言Linux专栏链接)大家可以关注一下,后面我会一点一点的更新的。大家坐稳扶好,要开车了!!!拷贝函数拷贝构造详细介绍)        是C++中的一个特殊成员函数,用于创建对象的副本。它的作用是通过使用已有对象的属性值来初始......
  • 【C++入门到精通】C++入门 —— 深浅拷贝函数
     目录拷贝函数浅拷贝拷贝构造函数深拷贝拷贝构造函数总结 前言Linux专栏链接)大家可以关注一下,后面我会一点一点的更新的。大家坐稳扶好,要开车了!!!拷贝函数拷贝构造详细介绍)        是C++中的一个特殊成员函数,用于创建对象的副本。它的作用是通过使用已有对象的属性值来初始......
  • Java和C++的区别:传闻这个问题能分辨你是不是科班出生?
    大家好,欢迎来到程序视点!我是小二哥。今天听到一个面试的小伙伴分享了他的面试经历,说面试官第一个问题是:Java语言和C++语言的区别有哪些?坊间流传,早些年间这个问题能区分一个Java程序员是不是科班出身!小伙伴怎么认为呢?缘由由于Java本来就是从C++衍生出来的,而且Java语言......
  • C++缺省参数
    缺省参数什么是缺省参数呢?简单来说,就是函数的参数可以给一个默认值,如果不给这个函数传递参数的时候那么改参数就是默认值,否则参数就是你指定的参数缺省参数分为全缺省和半缺省全缺省参数:所有的参数都有默认值voidfunc(inta=10,intb=20,intc=30){cou......
  • 图论---可视区域获取(C++)
    1.开源库获取   地址:http://en.wikipedia.org/wiki/Visibility_graph2.使用使用处包含头文件 #include"visilibity.hpp"即可,以下面在Qt中使用为例:1/*2=========AVisiLibityExampleProgram=========3Thisprogramprovidesatextinterfacewhic......