![]() |
#2
林月儿2015-06-19 19:48
![]() //二叉树查找插入操作 #include<iostream> #include<cstdlib> #include<stack> #define false 1 #define ture 0 using namespace std; typedef int Status; typedef struct BiTNode { int data; struct BiTNode *lchild; struct BiTNode *rchild; }BiTNode,*BiTree; BiTNode* InsertBST(BiTNode *T,int key) { BiTree p,s; int f=0; // if(!SearchBST(T,key,NULL,&p))//查找不成功 //{ s=(BiTree)malloc(sizeof(BiTNode)); s->data=key; s->lchild=s->rchild=NULL; if(T==NULL) T=s;//插入s为新的根结点 else { p=T; while(!f){ if(key<p->data){ if(p->lchild==NULL){p->lchild=s;f=1;} else p=p->lchild; } else if(key>p->data){ if(p->rchild==NULL){p->rchild=s;f=1;} else p=p->rchild; } else {cout<<"出现重复值"<<endl;f=1;} } } return T; // } // else // return false; } void Preorder(BiTNode *root) //先序遍历打印二叉树 { if(root!=NULL) { cout<<root->data<<" "; Preorder(root->lchild); Preorder(root->rchild); } } void inorder(BiTNode *root) //z中序遍历打印二叉树 { if(root!=NULL) { inorder(root->lchild); cout<<root->data<<" "; inorder(root->rchild); } } int main() { int i; int a[10]={62,88,58,47,35,73,51,99,37,93}; BiTree T=(BiTree)malloc(sizeof(BiTNode)); T=NULL; for(i=0;i<10;i++) T=InsertBST(T,a[i]); cout<<"前序遍历为:"; Preorder(T);//请教一下各位大神这里面的参数应怎么写,怎样让头指针指向树第一个结点。 cout<<endl; cout<<"中序遍历为:"; inorder(T); // system("pause");//上面BiTree T=NULL将头指针指向空了, //这是上面程序的需要,可我想遍历一下,没想出来怎么做。 return 0; } |
//二叉树查找插入操作
#include<iostream>
#include<stack>
using namespace std;
typedef int Status;
#define false 1
#define ture 0
typedef struct BiTNode
{
int data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
Status SearchBST(BiTree T,int key,BiTree f,BiTree *p)
{
if(!T)//查找不成功
{
*p=f;//指针f指向T的双亲,初始值为NULL
return false;
}
else if(key==T->data)//查找成功
{
*p=T;//指针p只想该数据元素的结点
return ture;
}
else if(key<T->data)
return SearchBST(T->lchild,key,T,p);
else
return SearchBST(T->rchild,key,T,p);
}
Status InsertBST(BiTree *T,int key)
{
BiTree p,s;
if(!SearchBST(*T,key,NULL,&p))//查找不成功
{
s=(BiTree)malloc(sizeof(BiTNode));
s->data=key;
s->lchild=s->rchild=NULL;
if(!p)
*T=s;//插入s为新的根结点
else if(key<p->data)
p->lchild=s;
else
p->rchild=s;
return ture;
}
else
return false;
}
void Preorder(BiTNode *root) //先序遍历打印二叉树
{
if(root!=NULL)
{
printf("%c ",root->data);
Preorder(root->lchild);
Preorder(root->rchild);
}
}
int main()
{
int i;
int a[10]={62,88,58,47,35,73,51,99,37,93};
BiTree T=NULL;
for(i=0;i<10;i++)
{
InsertBST(&T,a[i]);
}
for(i=0;i<10;i++)
{
cout<<a[i]<<" ";
}
cout<<endl;
cout<<"前序遍历为:";
Preorder();//请教一下各位大神这里面的参数应怎么写,怎样让头指针指向树第一个结点。
system("pause");//上面BiTree T=NULL将头指针指向空了,
//这是上面程序的需要,可我想遍历一下,没想出来怎么做。
return 0;
}