前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >是否为同一二叉搜索树

是否为同一二叉搜索树

作者头像
喜欢ctrl的cxk
发布2019-11-08 16:59:31
3210
发布2019-11-08 16:59:31
举报
文章被收录于专栏:Don的成长史

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/weixin_42449444/article/details/86163191

题目描述:

判断两序列是否为同一二叉搜索树序列

输入描述:

开始一个数n,(1<=n<=20) 表示有n个需要判断,n= 0 的时候输入结束。 接下去一行是一个序列,序列长度小于10,包含(0~9)的数字,没有重复数字,根据这个序列可以构造出一颗二叉搜索树。 接下去的n行有n个序列,每个序列格式跟第一个序列一样,请判断这两个序列是否能组成同一颗二叉搜索树。

输出描述:

如果序列相同则输出YES,否则输出NO。

输入样例:

代码语言:javascript
复制
2
567432
543267
576342
0

输出样例:

代码语言:javascript
复制
YES
NO

解题思路:

利用队列来层次遍历二叉树求解。

AC代码:

代码语言:javascript
复制
#include <bits/stdc++.h>
using namespace std;

typedef struct TreeNode
{
    int data;
    TreeNode *lchild,*rchild;
}*Tree;
//利用队列来实现二叉树的层次遍历
void LevelOrder(Tree root,vector<int> &v)  
{
    v.clear();   //一定先清空容器
    queue<Tree> q;
    q.push(root);
    while(!q.empty())   //队列非空时
    {
        Tree bt = q.front();
        q.pop();
        v.push_back(bt->data);
        //将队首结点的左孩子结点入队列
        if(bt->lchild != NULL)
        {
            q.push(bt->lchild);
        }
        //将队首结点的右孩子结点入队列
        if(bt->rchild != NULL)
        {
            q.push(bt->rchild);
        }
    }
}

void Insert(Tree &root,int x)
{
    if(root == NULL)
    {
        root = new TreeNode;
        root->data = x;
        root->lchild = root->rchild = NULL;
    }
    else if(x < root->data)
    {
        Insert(root->lchild,x);
    }
    else
    {
        Insert(root->rchild,x);
    }
}

Tree Str2Tree(string s)     //根据字符串得到一棵树
{
    Tree bt = NULL;
    for (int i = 0; i < s.length(); ++i)
    {
        Insert(bt,s[i]);
    }
    return bt;
}

int main()
{
    int n;
    string str,temp;
    vector<int> a,b;
    while(cin >> n && n)
    {
        cin >> str;
        Tree bt = Str2Tree(str);
        LevelOrder(bt,a);
        for (int i = 0; i < n; ++i)
        {
            cin >> temp;
            Tree temp_bt = Str2Tree(temp);
            LevelOrder(temp_bt,b);
            if(a == b)
            {
                cout << "YES" << endl;
            }
            else
            {
                cout << "NO" << endl;
            }
        }
    }
    return 0;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/01/09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目描述:
  • 输入描述:
  • 输出描述:
  • 输入样例:
  • 输出样例:
  • 解题思路:
  • AC代码:
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档