hhhh还好还好 发表于 2018-8-6 23:20:53

关于二叉树的建立与遍历问题

一个二叉树建立与遍历的程序,无法输出。代码如下(主函数中我为了验证方便只写了一个函数,但是这3个遍历函数我都实验过,都无法输出)

输入格式为:6 2 1 0 0 4 3 0 0 0 8 0 0

#include <stdio.h>
#include <stdlib.h>

typedef struct Treenode
{
        int data;
        struct Treenode *left,*right;
}Tree,*pTree;


void createTree(pTree T)
{
        int ch;
        printf("请输入字符:");
        scanf("%d",&ch);
        if(ch==0)
                T=NULL;
        else
        {
                T=(pTree)malloc(sizeof(Tree));
                T->data=ch;
                printf("请输入左子树");
                createTree(T->left);
                printf("请输入右子树");
                createTree(T->right);
        }
}


void xianxubianli(pTree T)
{
        if(T!=NULL)
        {
                printf("%d\n",T->data);
                xianxubianli(T->left);
                xianxubianli(T->right);
        }
}


void zhongxubianli(pTree T)
{
        if(T!=NULL)
        {
                zhongxubianli(T->left);
                printf("%d\n",T->data);
                zhongxubianli(T->right);
        }
}



void houxupaixu(pTree T)
{
        if(T!=NULL)
        {
                houxupaixu(T->left);
                houxupaixu(T->right);
                printf("%d\n",T->data);
        }
}


int main()
{
        pTree T=NULL;
        createTree(T);
        zhongxubianli(T);
}

TOP_LK 发表于 2018-8-7 10:07:11

把createTree(pTree T)里面参数改为对指针的引用createTree(pTree &T)

hhhh还好还好 发表于 2018-8-7 15:42:30

TOP_LK 发表于 2018-8-7 10:07
把createTree(pTree T)里面参数改为对指针的引用createTree(pTree &T)

我在结构体定义那里写的是*pTree,这个就代表struct Treenode *,所以这个和加不加&没关系, 而且加上&反而出现语法错误

TOP_LK 发表于 2018-8-7 17:24:38

hhhh还好还好 发表于 2018-8-7 15:42
我在结构体定义那里写的是*pTree,这个就代表struct Treenode *,所以这个和加不加&没关系, 而且加上&反 ...

你要先加上&试试嘛,你不试一下怎么会知道有错,又不是编译器{:10_245:}

hhhh还好还好 发表于 2018-8-8 10:58:12

TOP_LK 发表于 2018-8-7 17:24
你要先加上&试试嘛,你不试一下怎么会知道有错,又不是编译器

额,我没试过肯定不会回复哒,我试过了还多了4个错误QAQ

TOP_LK 发表于 2018-8-8 14:15:04

语法绝对不会有问题,我这儿可以正常运行,应该是编译器的问题

hhhh还好还好 发表于 2018-8-8 14:22:16

TOP_LK 发表于 2018-8-8 14:15
语法绝对不会有问题,我这儿可以正常运行,应该是编译器的问题

我用的是vc++编译器,而且我有个疑问,pTree T应该和struct Treenode *T 的含义相同呀,为啥还要在pTree后面加一个&呢?

TOP_LK 发表于 2018-8-8 14:39:50

&的意思是传进来对节点指针的引用,括号内等价于 TreeNode* &T,目的是让传递进来的指针发生改变,不然 T 仍然为NULL。
页: [1]
查看完整版本: 关于二叉树的建立与遍历问题