鱼C论坛

 找回密码
 立即注册
查看: 2122|回复: 7

[已解决]关于二叉树的建立与遍历问题

[复制链接]
发表于 2018-8-6 23:20:53 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
一个二叉树建立与遍历的程序,无法输出。代码如下(主函数中我为了验证方便只写了一个函数,但是这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);
}

最佳答案
2018-8-8 14:15:04
语法绝对不会有问题,我这儿可以正常运行,应该是编译器的问题
GIF.gif
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-8-7 10:07:11 | 显示全部楼层
把createTree(pTree T)里面参数改为对指针的引用createTree(pTree &T)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-8-7 15:42:30 | 显示全部楼层
TOP_LK 发表于 2018-8-7 10:07
把createTree(pTree T)里面参数改为对指针的引用createTree(pTree &T)

我在结构体定义那里写的是*pTree,这个就代表struct Treenode *,所以这个和加不加&没关系, 而且加上&反而出现语法错误
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

你要先加上&试试嘛,你不试一下怎么会知道有错,又不是编译器
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-8-8 10:58:12 | 显示全部楼层
TOP_LK 发表于 2018-8-7 17:24
你要先加上&试试嘛,你不试一下怎么会知道有错,又不是编译器

额,我没试过肯定不会回复哒,我试过了还多了4个错误QAQ
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-8 14:15:04 | 显示全部楼层    本楼为最佳答案   
语法绝对不会有问题,我这儿可以正常运行,应该是编译器的问题
GIF.gif
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-8-8 14:22:16 | 显示全部楼层
TOP_LK 发表于 2018-8-8 14:15
语法绝对不会有问题,我这儿可以正常运行,应该是编译器的问题

我用的是vc++编译器,而且我有个疑问,pTree T应该和struct Treenode *T 的含义相同呀,为啥还要在pTree后面加一个&呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-8 14:39:50 | 显示全部楼层
&的意思是传进来对节点指针的引用,括号内等价于 TreeNode* &T,目的是让传递进来的指针发生改变,不然 T 仍然为NULL。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-3 19:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表