梦,才是最真的现实

导航

寻找二叉树某节点的路径

#include<stdio.h>
#include<stdlib.h>
typedef struct btree 
{
int data;
struct btree *left;
struct btree *right;
}tree;
void preorder(tree *t);
void insert(int k,tree *&t);
int findpath(int k,tree *t);
int main()
{
int n,k,i;
tree *t=NULL;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&k);
insert(k,t);
}
preorder(t);
putchar('\n');
scanf("%d",&k);
findpath(k,t);
return 0;
}
void insert(int k,tree *&t)
{
tree *pf,*p,*newnode;
newnode=(tree*)malloc(sizeof(tree));
newnode->data=k;
newnode->left=newnode->right=NULL;
if(t==NULL)   t=newnode;
else
{
p=t;
while(p)
{
pf=p;
if(p->data>k) 
p=p->left;
else p=p->right;
}
if(pf->data>k)
pf->left=newnode;
else pf->right=newnode;
}
}
void preorder(tree *t)
{
if(t)
{
printf("%d ",t->data);
preorder(t->left);
preorder(t->right);
}
}
int findpath(int k,tree *t)
{
if(t==NULL)
return 0;
if(t->data==k)
{
return 1;
}
else 
{
if(findpath(k,t->left))
{
printf("%d ",t->data);
return 1;
}
if(findpath(k,t->right))
{
printf("%d ",t->data);
return 1;
}
}

}

自己第一次用递归,感觉递归其实很强大,只是相对于递推来说空间浪费相对较多

posted on 2012-05-04 11:08  梦,才是最真的现实  阅读(383)  评论(0编辑  收藏  举报