遍历-数据结构问题。二叉树,程序写了编译没错,但没办法运行。求大神看下。

问题描述

数据结构问题。二叉树,程序写了编译没错,但没办法运行。求大神看下。

#include
#define MAXLEN 100
using namespace std;
typedef char elementType;
typedef struct lBnode
{elementType data;
struct lBnode *lchild,*rchild;
}Binode,*Bitree;

void create(Bitree &T) //创建二叉链表
{char ch;
cin>>ch;
if(ch=='#')
T=NULL;
else
{T=new Binode;
T->data=ch;
create(T->lchild);
create(T->rchild);}
}

void preorder(Bitree T) //先序遍历
{if(T)
{cout<data;
preorder(T->lchild);
preorder(T->rchild);}
}

void inorder(Bitree T) //中序遍历
{if(T)
{
inorder(T->lchild);
cout<data;
inorder(T->rchild);}
}

void postorder(Bitree T) //后序遍历
{if(T)
{
postorder(T->lchild);
cout<data;
postorder(T->rchild);}
}

int depth(Bitree T) //高度
{int h,hl,hr;
if(!T) h=0;
else
{hl=depth(T->lchild);
hr=depth(T->rchild);
h=hl>hr?hl+1:hr+1;}
return h;}

void countleaf(Bitree T,int &n) //叶子节点个数
{if(T)
{if(!T->lchild&&T->rchild)
n++;
countleaf(T->lchild,n);
countleaf(T->rchild,n);}
}

void main()
{Binode *T;
int n;
create(T);
cout<<"先序遍历序列:";
preorder(T);
cout<<"中序遍历序列:";
inorder(T);
cout<<"后序遍历序列:";
postorder(T);
cout<<"二叉树的深度为:";
depth(T);
cout<<"叶子节点的个数为:";
countleaf(T,n);
}

我就不懂了,为什么创建二叉链表的时候不进入那个子函数,让我输入字符呢?好郁闷。能帮我看看么?

解决方案

你定义的T可能指向一个不可用的内存空间,赋值为null试试呢~

解决方案二:

#include
#define MAXLEN 100
using namespace std;

typedef char elementType;

typedef struct lBnode
{
elementType data;
struct lBnode *lchild,*rchild;
}Binode,*Bitree;

void create(Bitree &T) //创建二叉链表
{
cout<
cout
char ch;
cin>>ch;
if(ch == '#')
{
T=NULL;
return; //递归必须有结束函数的项目,不然就会无限循环。
}
else
{
T = new Binode;
T->data=ch;
create(T->lchild);
create(T->rchild);
}
}

void preorder(Bitree T) //先序遍历
{
if(T)
{
cout<data;
preorder(T->lchild);
preorder(T->rchild);
}
}

void inorder(Bitree T) //中序遍历
{
if(T)
{
inorder(T->lchild);
cout<data;
inorder(T->rchild);
}
}

void postorder(Bitree T) //后序遍历
{
if(T)
{
postorder(T->lchild);
cout<data;
postorder(T->rchild);

}
}

int depth(Bitree T) //高度
{
int h,hl,hr;
if(!T)
h=0;
else
{
hl=depth(T->lchild);
hr=depth(T->rchild);
h=hl>hr?hl+1:hr+1;
}
return h;
}

void countleaf(Bitree T,int &n) //叶子节点个数
{
if(T)
{
if(!T->lchild&&T->rchild)
n++;
countleaf(T->lchild,n);
countleaf(T->rchild,n);
}
}

void main()
{
Binode *T = NULL;//初始化为NULL,避免出现野指针
int n;
cout<<1<<endl;//辅助查看是否进入子函数
create(T);
cout<<2<<endl;//辅助查看是否进入子函数
cout<<"先序遍历序列:";
preorder(T);
cout<<"中序遍历序列:";
inorder(T);
cout<<"后序遍历序列:";
postorder(T);
cout<<"二叉树的深度为:";
depth(T);
cout<<"叶子节点的个数为:";
countleaf(T,n);
}

与你的程序对比,其实已经进入子函数了。你应当注意以下问题:
1. 程序野指针问题
2. 递归相关问题
3. 程序中还有一些小问题,比如敲写代码错误。
仔细看看相关的书籍,会对你有很大的帮助。

解决方案三:

好高深的样子,c与c++请务必记得初始化!初始化才会有内存分配。否则啥问题都可能出现。

时间: 2024-08-20 00:46:14

遍历-数据结构问题。二叉树,程序写了编译没错,但没办法运行。求大神看下。的相关文章

矩阵-求泰勒公式展开的有限差分中心差分算子的权系数,我的这个程序写出来所有结果都为-nan,求大神解答,急

问题描述 求泰勒公式展开的有限差分中心差分算子的权系数,我的这个程序写出来所有结果都为-nan,求大神解答,急 #include"stdio.h" #include"malloc.h" #include"math.h" #include"string.h" main(){ int i,j,n; printf("请输入需计算中心差分阶数:"); scanf("%d",&j); wh

Android studio JNI如何混合编译C和C++啊求大神告知

问题描述 Android studio JNI如何混合编译C和C++啊求大神告知 最近小弟在学习Android studio的开发(毕设)之前完全没接触过Android这边有一个别的大神写的程序包但是小弟无法完整导入最新的Android studio,导入后只有Java和Android部分.C和C++部分都不见了.请问如何完整导入并创造完整的关联呢?

窗口风格-MFC SDI禁掉最大化按钮后程序把桌面任务里覆盖了,求大神解答

问题描述 MFC SDI禁掉最大化按钮后程序把桌面任务里覆盖了,求大神解答 2C MFC SDI禁掉最大化按钮后程序把桌面任务里覆盖了,求大神解答 解决方案 我是在 PreCreate 函数修改的窗口风格 BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs){ if( !CFrameWndEx::PreCreateWindow(cs) ) return FALSE; // TODO: 在此处通过修改 // CREATESTRUCT cs 来修改窗口

java-为什么这三段代码写出来的文件没有区别,求大神解答

问题描述 为什么这三段代码写出来的文件没有区别,求大神解答 File f=new File("d:/text1.txt"); FileOutputStream outfile=new FileOutputStream(f,true); try { for(int i='A';i<='Z';i++) outfile.write(i); outfile.write('t'); byte b[]="java程序设计".getBytes(); outfile.writ

急求大神指点下我在delphi写的这个数据库双表查询插入的问题

问题描述 急求大神指点下我在delphi写的这个数据库双表查询插入的问题 我要实现的是A任务表,B任务执行状态两表关联查询后,得到A表中能执行的数据,查询出来的结果确实是A表中能执行任务的数据, 但是在向B表中插入这条A表数据执行状态的时候,插入B表中的数据ID不是之前查询A表出来数据的ID, 下面附上代码,求大大们指点 //定义了任务运行表插入数据操作过程 procedure TForm1.InsertData(exeid,status,starttime,endtime,result : s

cocos2d-x-3.8编译android报错,求大神帮帮忙

问题描述 cocos2d-x-3.8编译android报错,求大神帮帮忙 创建了一个cocos2d项目,添加了几行代码,在vs2012下运行正常,编译win32也正常,但是一编译android就报错 NDK用android-ndk-r9d和android-ndk-r10两个版本试过,估计不是ndk的原因,其他的原因也想不出来,求大神帮忙解决 这是报错的原文 E:cocosfu100>cocos compile -p android -j 4 执行命令:compile 编译模式:debug 使用

helloworld-为生么这个程序几个编译程序都无法显示呀??求大神解释下!!

问题描述 为生么这个程序几个编译程序都无法显示呀??求大神解释下!! public class HelloWorld{ public static void main(String[] args) { int num = 999; int count = 0; for(;(num/10)>1; count++) { ; } System.out.print("它是个"+count+"位的数"); } } 解决方案 for(;(num/10)>1; cou

代码-求大神告诉下,action=&amp;amp;quot;Add&amp;amp;quot;写在form里和写在 submit里有什么区别吗?

问题描述 求大神告诉下,action="Add"写在form里和写在 submit里有什么区别吗? 求大神告诉下,action="Add"写在form里和写在 submit里有什么区别吗?submit里的name不写可以吗?为什么?最后div...div里的class和另外三个都是什么意思?求求大神可怜可怜我这个新手吧,详细告知下 <s:form action="Add" id="form1" theme="s

cocos2d-x-在vs2013初次编译时候报错,求大神指点

问题描述 在vs2013初次编译时候报错,求大神指点 用cocos2dx 3.9版本新建立项目后用vs2013打开并初次编译 然后就弹出错误提示框,内容如下 Can't create window More info: GLFWError #65537 Happen,The GLFW library is not initialized 对于编程小白的我来说,度娘找不到的问题,我也就误解了,求大神指点 这该怎么解决 解决方案 环境配置的问题http://www.cnblogs.com/graph