hdoj-3791-二叉搜索树(二叉搜索树模板题)

#include <cstring>
#include <cstdio>
#include <iostream>
using namespace std;

typedef int ElemType;
template<typename T>
int getArrayLength(T &array) {
    return (sizeof(array) / sizeof(array[0]));
}

typedef struct node{
    ElemType data;
    struct node *lchild, *rchild;
}*BST;

bool insertBST(BST &T, ElemType element) {
    if (T == NULL) {
        T = new node;
        T->data = element;
        T->lchild = T->rchild = NULL;
        return true;
    }
    if (T->data == element) return false;
    if (element< T->data) insertBST(T->lchild, element);
    else insertBST(T->rchild, element);
}
//judge
int flag;
void judge(BST T1, BST T2) {
    if (T1 == NULL && T2 == NULL) {
        return ;
    } else if(T1->data != T2->data) {//数据比较坑
        flag = 0;
        return ;
    } else if(((T1->lchild !=NULL && T2->lchild !=NULL) || (T1->lchild ==NULL && T2->lchild ==NULL)) &&
        ((T1->rchild !=NULL && T2->rchild !=NULL) || (T1->rchild ==NULL && T2->rchild ==NULL))) {//需要考虑全面
        judge(T1->lchild, T2->lchild);
        judge(T1->rchild, T2->rchild);
    }else flag = 0;
}
int main() {
    int t, n ,k ,x;
    BST tree[25];

    while (scanf("%d", &t)!=EOF && t) {
        memset(tree, 0, sizeof(tree));
        for (int i=0; i<t+1; i++) {
            BST T = NULL;
            char s[11];
            scanf("%s", s);
            for (int j=0; j<=strlen(s)-1; j++)
                insertBST(T, s[j]-‘0‘);
            tree[i] = T;
        }
        for (int i=1; i<t+1; i++) {
            flag = 1;
            judge(tree[0], tree[i]);
            if (flag) printf("YES\n");
            else printf("NO\n");
        }
    }
}

原文地址:https://www.cnblogs.com/evidd/p/9073954.html

时间: 2024-10-08 13:43:56

hdoj-3791-二叉搜索树(二叉搜索树模板题)的相关文章

算法导论第十二章__二叉搜索数

package I第12章__二叉搜索树; //普通二叉树 public class BinaryTree<T> { // -----------------------数据结构--------------------------------- private int height = 0; private Node<T> rootNode; class Node<T> { T t; int key; Node left; Node right; public Node

TYVJ P1051 选课 Label:多叉转二叉&amp;&amp;树形dp(虐心?)

描述 学校实行学分制.每门的必修课都有固定的学分,同时还必须获得相应的选修课程学分.学校开设了N(N<300)门的选修课程,每个学生可选课程的数量M是给定的.学生选修了这M门课并考核通过就能获得相应的学分. 在选修课程中,有些课程可以直接选修,有些课程需要一定的基础知识,必须在选了其它的一些课程的基础上才能选修.例如<Frontpage>必须在选修了<Windows操作基础>之后才能选修.我们称<Windows操作基础>是<Frontpage>的先修课

PHP生成二维码二种方法和实例

PHP生成二维码的两个方法和实例,分别使用Google API和PHP二维码生成类库PHP QR Code实现. 之前介绍过通过使用jQuery插件来生成二维码,今天分享下如何使用PHP生成二维码,以及如何生成中间带LOGO图像的二维码.利用Google API生成二维码Google提供了较为完善的二维码生成接口,调用API接口很简单,以下是调用代码: $urlToEncode="http://www.jbxue.com"; generateQRfromGoogle($urlToEnc

hdu1823 Luck and Love 二维RMQ(二维线段树)

题意:给定你二维范围,找这个范围里面的最大值 解题思路:二维线段树有两种实现方式,一种是  树套树  ,另一种则是将二维平面分成4块的  完全四叉树 我的代码: // File Name: 1823.cpp // Author: darkdream // Created Time: 2014年07月10日 星期四 09时38分05秒 #include<vector> #include<list> #include<map> #include<set> #in

c++实验十二 数组(二维)

先通过一个二维数组保存学生相关的信息 为了更直观的观看,决定用字符串数组来保存数据 当然在计算的时候要转变格式, // 实验十二 数组(二维).cpp: 定义控制台应用程序的入口点. #include "stdafx.h" #include<iostream> using namespace std; #include<string> int main() { string a[4][5] = { {"生","号",&qu

MATLAB二维绘图(二)向图中添加标题,坐标轴,图标和文字信息

MATLAB二维绘图(二)向图中添加标题,坐标轴,图标和文字信息 1.添加标题.图例.x轴信息和y轴信息,示例: %% 添加标题 clear; clc; close all; x = 0:0.1:2*pi; y1 = sin(x); y2 = exp(-x); plot(x, y1, '--*', x, y2, ':o'); xlabel('t = 0 to 2\pi'); % 添加x轴信息 ylabel('values of sin(t) and e^{-x}') % 添加y轴信息 e^{-x

题目1009:二叉搜索树(二叉搜索树的建立)

题目链接:http://ac.jobdu.com/problem.php?pid=1009 详解链接:https://github.com/zpfbuaa/JobduInCPlusPlus 参考代码: // // 1009 二叉搜索树.cpp // Jobdu // // Created by PengFei_Zheng on 09/04/2017. // Copyright © 2017 PengFei_Zheng. All rights reserved. // #include <stdi

二叉搜索树(二叉排序搜索树)

二叉搜索树 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 4117    Accepted Submission(s): 1802 Problem Description 判断两序列是否为同一二叉搜索树序列 Input 开始一个数n,(1<=n<=20) 表示有n个需要判断,n= 0 的时候输入结束. 接下去一行是一个序列,序列长度

二叉搜索树与双向链表 【第一题】

题目要求:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表.要求不能创建任何新的结点,只能调整树中结点指针的指向. 解决思路: 1. 根据观察可知,双向链表顺序即为二叉树的中序遍历结果----->采用中序遍历+递归: 2. 中序遍历顺序为:左+中+右,传入一个变量pre. pre可以这样理解:当前结点的pre就是当前结点的前驱.如结点6的前驱是4,结点10的前驱是8.结点4的前驱是NULL. #include <iostream> using namespace std; ty

二叉搜索树//二叉搜索树

题目: 二叉搜索树 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 6945    Accepted Submission(s): 3077 Problem Description 判断两序列是否为同一二叉搜索树序列 Input 开始一个数n,(1<=n<=20) 表示有n个需要判断,n= 0 的时候输入结束.接下去一行是一个序列,序列