注册 登录
编程论坛 数据结构与算法

关于二cha树的问题

发布于 2010-06-03 17:57, 493 次点击
输入一个值(假设树中每个结点的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;
}
2 回复
#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;
        }
    }
}

#3
2010-06-03 21:31
谢谢夸奖,没初始化这个错误真是不能犯啊。
1