| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1367 人关注过本帖
标题:二叉树深度及编译报警问题
取消只看楼主 加入收藏
Nekomimi
Rank: 2
等 级:论坛游民
帖 子:80
专家分:15
注 册:2006-11-21
结帖率:100%
收藏
 问题点数:0 回复次数:5 
二叉树深度及编译报警问题
#include <stdio.h>
#include <stddef.h>
#define NULL ((void *)0)
typedef struct{
    char e;
    struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
//建立二叉树
int creatT(BiTree *T){
    int c;
     scanf("%c",&c);
    if(c==' '){
        *T=NULL;
    }else{
        if(!((*T)=(BiTNode *)malloc(sizeof(BiTNode)))){
            printf("ERROR");
            return 0;
        }
        (*T)->e=c;
        creatT(&((*T)->lchild));
        creatT(&((*T)->rchild));
    }
    return 1;
}
//打印二叉树
void printfT(BiTree *T){
    if(*T==NULL){
        printf(" ");
    }else{
        printf("%c",(*T)->e);
        printfT(&((*T)->lchild));
        printfT(&((*T)->rchild));
    }
}
//计算结点
int countNT(BiTree *T,int n){
    static i=0;
    if(*T){
        if(!((*T)->lchild)&&!((*T)->rchild)){
            i++;
        }
        countNT(&((*T)->lchild),i);
        countNT(&((*T)->rchild),i);
    }
    n=i;
    return n;
}
//求深度
int depT(BiTree *T){
    int i=0,j=0;
    int dep;
    if(!*T){
        dep=0;
    }else{
        i=depT(&((*T)->lchild));
        j=depT(&((*T)->rchild));
    }
    dep=(i>j?i:j)+1;
    return dep;
}
int main(int argc, char *argv[])
{
    BiTree *T;
    int i,n=0;
    printf("please input elements:");
    creatT(&T);
    printfT(&T);
    i=countNT(&T,n);
    printf("\nnode is: %d",i);
    i=depT(&T);
    printf("\ndep is: %d",i);
    return 0;
}
深度算出来总是不对,比如:输入ab##c## (#表示空),结果输出的是3,应该是2才对呀。。
另外,编译时总是出现:[Warning] H:\main.c:70: warning: passing arg 1 of `depT' from incompatible pointer type
不止一句,所有函数出现的地方都出现了。。请教到底是什么原因啊。。
搜索更多相关主题的帖子: 深度 二叉树 编译 报警 
2010-01-22 20:28
Nekomimi
Rank: 2
等 级:论坛游民
帖 子:80
专家分:15
注 册:2006-11-21
收藏
得分:0 
以下是引用rwyangguang在2010-1-24 12:22:01的发言:

typedef struct BiTNode{
    char e;
    struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
加了“BiTNode”确实不报警了。。这个必须加的吗?我以前都没加。。
另外,深度为什么错了?和答案差不多的呀。。。
2010-01-24 22:27
Nekomimi
Rank: 2
等 级:论坛游民
帖 子:80
专家分:15
注 册:2006-11-21
收藏
得分:0 
以下是引用rwyangguang在2010-1-26 19:07:29的发言:

BiTNode学的时候叫结构体名   建议你去看看结构体那块

int depT(BiTree T)
{  if(!T)  return 0;
   if(!T->lchild&&!T->rchild)  return 1;
   return depT(T->lchild)>depT(T->rchild)?depT(T->lchild):depT(T->r ...
还是不得行呀。。。
2010-01-26 20:26
Nekomimi
Rank: 2
等 级:论坛游民
帖 子:80
专家分:15
注 册:2006-11-21
收藏
得分:0 
以下是引用sunkaidong在2010-1-26 22:07:19的发言:

    BiTree *T;//这里T是指针了
    creatT(&T);//?你是要传引用还是地址?如果你用.c的话就有问题了
    printfT(&T);
    i=countNT(&T,n);
    printf("\nnode is: %d",i);
    i=depT(&T);
大哥,能不能说详细点。。
我确实是想传地址,不行吗?.c有问题是指不能用c语言?
但是除了深度不能求出正确结果外,其余的都OK呀。。
2010-01-26 23:04
Nekomimi
Rank: 2
等 级:论坛游民
帖 子:80
专家分:15
注 册:2006-11-21
收藏
得分:0 
以下是引用rwyangguang在2010-1-26 23:06:39的发言:

第一次当好人
#include <stdio.h>
#include<stdlib.h>
typedef struct BiTNode{
    char e;
    struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
void init_tree(BiTree &T)//初始化树
{   T=NULL;
}
int  inse ...
[IMG]http://i32.[/IMG]
运行不了啊。。。
2010-01-26 23:16
Nekomimi
Rank: 2
等 级:论坛游民
帖 子:80
专家分:15
注 册:2006-11-21
收藏
得分:0 
以下是引用rwyangguang在2010-1-26 23:17:57的发言:

大神你什么编译器   我出结果2  再贴上来的
就算你这么说。。。
C-Free.. MinGW3.4.5
用Tc3也试了,也不行。。
2010-01-26 23:22
快速回复:二叉树深度及编译报警问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.028721 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved