华为机试题: 二叉搜索树

来源:互联网 发布:linux下tomcat自启动 编辑:程序博客网 时间:2024/05/20 23:35

描述: 

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

 题目类别: 树 难度: 中级 运行时间限制:10Sec内存限制:128MByte阶段: 入职前练习 输入: 

开始一个数n,(1<=n<=20) 表示有n个需要判断,n= 0 的时候输入结束。

 

 

 

接下去一行是一个序列,序列长度小于10,包含(0~9)的数字,没有重复数字,根据这个序列可以构造出一颗二叉搜索树。

 

 

 

接下去的n行有n个序列,每个序列格式跟第一个序列一样,请判断这两个序列是否能组成同一颗二叉搜索树。

 输出: 

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

 样例输入:
25674325432675763420                   
样例输出:
YESNO                   


#include <iostream>#include <stdio.h>#include <string>#include <algorithm>#include <map>#include <vector>using namespace std;typedef struct Node{    char data;    struct Node* lchild;    struct Node* rchild;    /*构造函数*/    Node(char d):data(d),lchild(NULL),rchild(NULL)    {    }}NODE;void InsertBiTreeNode(NODE* &root, char val){    NODE* pNewNode = new NODE(val);    /*如果是一个空树*/    if(root == NULL)    {        root = pNewNode;        return;    }    NODE* p = root, *pre = NULL;    /*找到插入的节点*/    while(p)    {        pre = p;        if(p->data < val)        {            p = p->rchild;        }        else        {            p = p->lchild;        }    }    /*将该节点插入*/    if(pre->data > val)    {        pre->lchild = pNewNode;    }    else    {        pre->rchild = pNewNode;    }    return;}/*构建线索二叉树*/NODE* createBiTree(string str){    int i = 0, lens = str.size();    NODE* root = NULL;    for(i = 0; i < lens; i++)    {        InsertBiTreeNode(root,str[i]);    }    return root;}/*前序遍历二叉树*/void preTree(NODE* root, string &ret){    if(root == NULL)    {        return;    }    ret += root->data;    preTree(root->lchild,ret);    preTree(root->rchild,ret);}int main(){    int n = 0;    while(cin >> n && n != 0)    {        string str,ret1;        NODE* root1 = NULL;        cin >> str;        root1 = createBiTree(str);        preTree(root1,ret1);        while(n--)        {            cin >> str;            NODE* pTree = NULL;            pTree = createBiTree(str);            string ret2;            preTree(pTree,ret2);            if(ret1 == ret2)            {                cout << "YES" << endl;            }            else            {                cout << "NO" << endl;            }        }    }    return 0;}


0 0
原创粉丝点击