注册 登录
编程论坛 C++教室

二叉树的建议与遍历 出错了

midle110 发布于 2011-11-16 11:27, 740 次点击
二叉树的建议与遍历   出错了 (遍历出错了)
直接上代码吧
#include "malloc.h"
#include "stdio.h"

typedef struct trees
{
    char data;
    struct trees *lchild,*rchild;
}treelist,*treelink;

void maketree(treelink &root);
void display(treelink root);

int main(int argc, char* argv[])
{
    treelist *root;
    root = (treelink)malloc( sizeof(treelist));
    maketree(root);
    display(root);
    return 0;
}

void maketree(treelink &root)
{

    char ch;
    scanf("%c",&ch);
    if (ch == '#')
    {
        root = NULL;
    }
    else
    {
        root = (treelink)malloc(sizeof(treelist));
        root->data = ch;
        maketree(root->lchild);
        maketree(root->rchild);
    }
}


void display(treelink root)
{
    while (root != NULL)
    {
        printf("%c  ",root->data);
        display(root->lchild);
        display(root->rchild);
    }
}
3 回复
#2
midle1102011-11-16 12:06
程序代码:
#include "malloc.h"
#include "stdio.h"

typedef struct trees
{
    char data;
    struct trees *lchild,*rchild;
}treelist,*treelink;

void maketree(treelink &root);
void display(treelink root);

int main(int argc, char* argv[])
{
    treelist *root;
    root = (treelink)malloc( sizeof(treelist));
    maketree(root);
    display(root);
    return 0;
}

void maketree(treelink &root)
{

    char ch;
    scanf("%c",&ch);
    if (ch == '#')
    {
        root = NULL;
    }
    else
    {
        root = (treelink)malloc(sizeof(treelist));
        root->data = ch;
        maketree(root->lchild);
        maketree(root->rchild);
    }
}


void display(treelink root)
{
    if (root != NULL)   //不是while   自己的代码看了好半天才知道哪里错了  一开始还以为是建树错了,没想到是遍历错了!!!
    {
        printf("%c  ",root->data);
        display(root->lchild);
        display(root->rchild);
    }
}
算了   我自己查出来了 , 坑爹的错误
#3
jcw081201102011-11-16 15:18
你这个先序遍历 就是递归调用而不是循环~~ 所以使用判断条件而不是循环语句!~ 不然又是循环又是递归~就很糟糕啦~
#4
心灵百合2011-11-17 18:12
仔细再仔细
1