您的位置:首页 > 其它

二叉排序数树

2016-03-02 17:48 323 查看
继续刷题,又拾起来一个知识点,二叉排序树。

二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树
若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树

还有前序中序后序查找。

新建,插入,删除。

加油。把代码保存下。

#include <iostream>

#include <string.h>

using namespace std;

struct Node{

Node* left;

Node* right;

char data;

Node():left(NULL),right(NULL),data('*'){}

};

//insert

void insertSortTree(Node * root,char data){

Node * p = root;

Node * q = new Node;

q->data = data;

while(1){

if(p->data>data&&p->left) //遍历直到左子树为空

p=p->left;

else if(p->data<data&&p->right)

p=p->right;

else if(p->data>data){

p->left=q;

return ;

}

else if(p->data<data){

p->right=q;

return ;

}

}

}

//destroy

void destroySortTree(Node * root){

Node * p = root;

if(p->left!=NULL)

destroySortTree(p->left);

if(p->right!=NULL)

destroySortTree(p->right);

delete p;

}

//create

Node * createSortTree(char * datas,int n){

if(n<=0)

return NULL;

Node * root = new Node;

root->data=datas[0];

Node* p = root;

for(int i=1;i<n;i++)

insertSortTree(root,datas[i]);

return root;

}

//变量声明

char x1[11],x2[11];

int ct1=0,ct2=0;

//先序遍历

void pre_lst(Node * root,char* x,int* index){

if(root)

x[(*index)++]=root->data;

if(root->left)

pre_lst(root->left,x,index);

if(root->right)

pre_lst(root->right,x,index);

}

//比较先序

bool cmp(int n){

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

if(x1[i]!=x2[i])

return false;

return true;

}

int main()

{

int T;

int n;

Node* root1=NULL;

Node* root2=NULL;

int index1,index2;

while(1){

cin>>T;

if(T==0)

break;

cin>>x1;

ct1=strlen(x1);

root1=createSortTree(x1,ct1);

index1=0;

pre_lst(root1,x1,&index1);

for(int i=0;i<T;i++){

cin>>x2;

ct2=strlen(x2);

root2=createSortTree(x2,ct2);

index2=0;

pre_lst(root2,x2,&index2);

if(cmp(ct1))

cout<<"YES"<<endl;

else

cout<<"NO"<<endl;

destroySortTree(root2);

}

destroySortTree(root1);

}

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: