|
|
#2
hzh5122010-06-03 20:44
如果程序是你自己思考后写出的,证明你的编程逻辑上了一个档次。
但仍有小问题,比如说不会初始化。这次你就是吃了这个亏。 不要小看这条简单的语句。 BiTree T = NULL; 程序代码:#include <stdio.h> #include <malloc.h> #define maxsize 100 typedef char ElemType; typedef struct node { ElemType data; struct node *lchild,*rchild; }BiNode,*BiTree; typedef struct stack { int tag; BiTree t; }stack; BiTree CreatBiTree(); void Way_to_root(BiTree T,ElemType x); int main() { BiTree T; ElemType x; T=CreatBiTree(); getchar(); scanf("%c",&x); Way_to_root(T,x); return 0; } BiTree CreatBiTree() { BiTree T = NULL; ElemType x; scanf("%c",&x); if(x!='@') { T=(BiTree)malloc(sizeof(BiNode)); T->data=x; T->lchild=CreatBiTree(); T->rchild=CreatBiTree(); } return T; } void Way_to_root(BiTree T,ElemType x)//查找路径函数 { BiTree p; stack tree[maxsize]; int i,k; i=0; p=T; while(i>0||p) { while(p) { tree[++i].t=p; tree[i].tag=0; p=p->lchild; } while(tree[i].tag==1&&i>0) { if(tree[i].t->data==x)//出栈时进行比较 { for(k=1;k<=i;k++) printf("%c ",tree[k].t->data); return ; } i--; } if(i>0) { p=tree[i].t->rchild; tree[i].tag=1; } } } |
输入一个值(假设树中每个结点的data域不同),差找从根到这个结点的路径.
代码如下:
#include <stdio.h>
#include <malloc.h>
#define maxsize 100
typedef char ElemType;
typedef struct node
{
ElemType data;
struct node *lchild,*rchild;
}BiNode,*BiTree;
typedef struct stack
{
int t
BiTree t;
}stack;
BiTree CreatBiTree()
{
BiTree T;
ElemType x;
scanf("%c",&x);
if(x!='#')
{
T=(BiTree)malloc(sizeof(BiNode));
T->data=x;
T->lchild=CreatBiTree();
T->rchild=CreatBiTree();
}
return T;
}
void Way_to_root(BiTree T,ElemType x)//查找路径函数
{
BiTree p;
stack tree[maxsize];
int i,k;
i=0;
p=T;
while(i>0||p)
{
while(p)
{
tree[++i].t=p;
tree[i].tag=0;
p=p->lchild;
}
while(tree[i].tag==1&&i>0)
{
if(tree[i].t->data==x)//出栈时进行比较
{
for(k=1;k<=i;k++) printf("%c ",tree[k].t->data);
return ;
}
i--;
}
if(i>0)
{
p=tree[i].t->rchild;
tree[i].tag=1;
}
}
}
int main()
{
BiTree T;
ElemType x;
T=CreatBiTree();
scanf("%c",&x);
Way_to_root(T,x);
return 0;
}
程序代码: