现在的位置: 首页 > 综合 > 正文

二叉树快速查找

2018年02月12日 ⁄ 综合 ⁄ 共 1811字 ⁄ 字号 评论关闭

#include <iostream>

#include <string.h>

using namespace std;


class TreeNode{

public:

    char n[10];

    TreeNode *left;

    TreeNode *right;

    TreeNode(){

        left = NULL;

        right = NULL;

    }

};


bool flag = false;

void search_and_insert(TreeNode *root, TreeNode *current);

int compare(char *a, char *b);

void deleteall(TreeNode *node);

int main()

{    

    int k;

    int n;

    cin>>k;

    TreeNode *root;

    for(int i=0 ;i<k; i++)

    {

        cin>>n;

        flag = false;

        for(int j=0; j<n; j++)

        {

            

            if(j==0)

            {

                root = new TreeNode();

                cin>>root->n;

            }

            else

            {

                TreeNode * current = new TreeNode();

                cin>>current->n;

                if(!flag)

                    search_and_insert(root, current);

                if(flag)

                    delete current;

            }

        }


        if(flag)

            cout<<"NO"<<endl;

        else

            cout<<"YES"<<endl;

        deleteall(root);

    }

    return 0;

}


void search_and_insert(TreeNode *root, TreeNode *current)

{

    TreeNode *temp = root;

    while(temp!=NULL)

    {

        int result = compare(temp->n, current->n);

        if(result == 0)

            return;

        else if(result == 1)

        {

            if(temp->left == NULL)

            {

                temp->left = current;

                return;

            }

            else

                temp = temp->left;

        }


        else if(result == -1)

        {

            if(temp->right == NULL)

            {

                temp->right = current;

                return;

            }

            else

                temp = temp->right;

        }

    }

}


int compare(char *a, char *b)

{

    int lena = strlen(a);

    int lenb = strlen(b);

    int min = lena>lenb ? lenb : lena;

    for(int i=0; i<min; i++)

    {

        if(a[i] > b[i])

            return 1;

        else if(a[i] < b[i])

            return -1;

    }


    flag = true;


    return 0;

}


void deleteall(TreeNode *node)

{

    if(node->left!=NULL)

        deleteall(node->left);

    if(node->right!=NULL)

        deleteall(node->right);

    delete node;

}

【上篇】
【下篇】

抱歉!评论已关闭.