二叉排序的建立
//然后找出9在第一串数字中的起始位置和最终出现的位置 时间复杂度log2^5
//【输入】
// 1599985
// 9
//【输出】
// 2 4
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
using namespace std;
//创建一棵二叉树
typedef struct BiTNode
{
int data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
void InsertBiTree(BiTree &T,int e)
{
BiTNode *p;
if(!T)
{
p=(BiTNode*)malloc(sizeof(BiTNode));
p->data=e;
p->lchild=p->rchild=NULL;
T=p;
}
else if(e<T->data)
{
InsertBiTree(T->lchild,e);
}
else if(e>T->data)
{
InsertBiTree(T->rchild,e);
}
}
void CreateBiTree(BiTree &T,int A[],int n)
{
int i;
T=NULL;
for(i=0;i<n;i++)
{
InsertBiTree(T,A[i]);
}
}
void PreTraverse(BiTree T)
{
if(T)
{
printf("%d ",T->data);
PreTraverse(T->lchild);
PreTraverse(T->rchild);
}
}
int main()
{
int n;
cin>>n;
int B[n];
for(int i=0;i<n;i++)
{
cin>>B[i];
}
printf("\n");
BiTree T;
CreateBiTree(T,B,n);
PreTraverse(T);
}

二叉排序树的查找
//二叉排序树的递归查找
BiTNode * SearchBT(BiTree T,int e)
{
if(T==NULL||e==T->data)
{
return T;
}
else if(e<T->data)
{
return SearchBT(T->lchild,e);
}
else
{
return SearchBT(T->rchild,e);
}
}
完整代码:
//然后找出9在第一串数字中的起始位置和最终出现的位置 时间复杂度log2^5
//【输入】
// 1599985
// 9
//【输出】
// 2 4
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
using namespace std;
//创建一棵二叉树
typedef struct BiTNode
{
int data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
void InsertBiTree(BiTree &T,int e)
{
BiTNode *p;
if(!T)
{
p=(BiTNode*)malloc(sizeof(BiTNode));
p->data=e;
p->lchild=p->rchild=NULL;
T=p;
}
else if(e<T->data)
{
InsertBiTree(T->lchild,e);
}
else if(e>T->data)
{
InsertBiTree(T->rchild,e);
}
}
void CreateBiTree(BiTree &T,int A[],int n)
{
int i;
T=NULL;
for(i=0;i<n;i++)
{
InsertBiTree(T,A[i]);
}
}
void PreTraverse(BiTree T)
{
if(T)
{
printf("%d ",T->data);
PreTraverse(T->lchild);
PreTraverse(T->rchild);
}
}
//二叉排序树的递归查找
BiTNode * SearchBT(BiTree T,int e)
{
if(T==NULL||e==T->data)
{
return T;
}
else if(e<T->data)
{
return SearchBT(T->lchild,e);
}
else
{
return SearchBT(T->rchild,e);
}
}
int main()
{
int n,e;
cin>>n;
int B[n];
for(int i=0;i<n;i++)
{
cin>>B[i];
}
printf("\n");
BiTree T;
BiTNode *p;
CreateBiTree(T,B,n);
PreTraverse(T);
cin>>e;
p=SearchBT(T,e);
if(p->data==e)
{
printf("数据%d已找到",p->data);
}
else
{
printf("数据%d未找到",p->data);
}
}

本文详细介绍了二叉排序树的构建过程,通过递归算法实现节点插入,并展示了如何进行前序遍历。此外,还讲解了二叉排序树的查找方法,包括递归查找特定元素的具体实现。
2159

被折叠的 条评论
为什么被折叠?



