看看这段代码,关于二叉树递归建立,以及前序遍历。为什么运行不出结果呢?在线等

作者&投稿:巨娴 (若有异议请与网页底部的电邮联系)
=w=这个以前中后三种方式遍历二叉树的代码,为什么中序遍历和后序遍历输出结果是错误的?~

哈哈 我第一次也是这个错误
偷懒在dfs的时候复制了前序的函数名字6次
所以你看你中序和后序的代码里的递归调的都是前序的函数名
//中序遍历
void InOrderTraverse(BiTree T){
if(T){
PreOrderTraverse(T->lchild);
printf("%c",T->data);
PreOrderTraverse(T->rchild);
}
}

错误相当多,很显然你应该从基础的开始写起,不要一上来就写如此复杂的程序

1. choice函数最后少了右括号
2. main函数中6条打印语句,
都不在引号中
3. main函数 第5条打印语句前面多了一个符号4
4. nrpostorder 函数中最后的while(top>0); while后面的左括号写成了全角的符号
5. inorder函数中打印语句的后引号,应该为双引号,你写了单引号
6. create 函数中if(ch == ' ')中的ch未定义
7. create 函数中p=NULL的p未定义
8. postorder函数中 NULL写成 NULLL ,多了一个L
9. create 函数中参数已经定义x变量,之后重定义x变量
10. 整个程序中充满了bitree, bittree, biitree, btree 等符号,这些都未定义

综上来说:
1. 其中有大量的拼写错误(包括上述第10条,8条,第5条,第3条,第4条),这些你应该自己能看出来
2. 建议保持良好的代码缩进风格,这样会看出大量括号上面的问题(第1条)
3. 避免粗心(第2条)
4. 你应该知道这个变量要用首先要申明过,因此6,7两条完全可以避免

程序是正确的,而你的输入可能有问题

看看我的输入



这个程序是按照先序遍历序列建立二叉树,此时的输入必须是某个二叉树的先序遍历序列,并且在先序遍历序列中要写出空结点的内容#,例如要建立一个只有根节点A的二叉树,此时的先序遍历序列是A##,也就是你的输入是A##。


这段C#代码是什么意思 其中的year%2是什么意思? 详细解答! 最好说全点...
是取余运算符。year % 2就是取 year 除以 2 的余数。例如:int i=3;int r=i%2=1;而上面这段代码就是判定int year=2046 若 year为2的倍数 则输出 你好;若 year为3的倍数 则输出 hello;默认输出 初次见面

java小白求助,麻烦看下这两段代码的区别?
第一个使用短路与判断,即&&。短路与:A&&B, 当A为false时,不去计算B的值而直接返回false;当A为true时,计算B的值。效果同第二个,只不过写起来第一个更方便

excel里 这段代码具体什么什么意思 =IF(ISERROR(VLOOKUP(A2,数据二!
查询A2在 数据二这张表里 A1:E23区域 第五列对应的值,若果能找到值 则返回所找到的值,若找不到 则返回空值

一道C++的编程题,关于一元二次方程的,有题目有代码,求解我的代码哪里错...
include <iostream>#include <cstdio>#include <cmath>using namespace std;int main() { double a,b,c; while(cin>>a>>b>>c) { double delta=b*b-4*a*c; if(delta>=0) { double x1=(-1*b+sqrt(delta))\/(2*a); double x2=(-1*b-sqrt(delta))\/(2*...

请问一下,这段代码哪里出错了?只能输入,不能输出啊,该怎么改啊?
看代码意思应该是想将输入的姓名输出,代码改成下面的即可,(提供给你两种方法,你的将两种方法混淆了):include<stdio.h>#include<stdlib.h>#define NUM 2char xingming[NUM];\/\/方法一int main(){scanf("%s",xingming);printf("%s",xingming);system("pause");return 0;} \/\/方法二\/*int ...

c# 谁能帮我看下这段代码,AND操作
0110==>6 1010==>10 与位操作以后得到 0010==>2

...请高手帮忙分析一下这段二进制代码 谢谢,看下图
这个命令你慢慢输,仔细点,输入正确的话会看到飞快地滚屏 否则……否则失败就是没这效果。回车后慢慢等(需要点时间1-2分钟) 都运行完再尝试之前的操作,看还有没有出现不能为read的现象。2、在控制面板的添加\/删除程序中看看你是否安装了微软NET.Framework,如果已经安装了,可以考虑卸载它,当然如果...

求C语言大神,为什么我的这段代码生成的不是二进制文件
这是因为UltraEdit自动根据文件内容来判断显示的方式,如果都是可识别的字符,则按照文本显示,如果有不可识别的字符,则按照二进制显示(例如别人的文件中有大量的字符00)。你程序中根据键盘的输入保存文件,你能用键盘输入的内容都是可识别的字符,因此显示为文本。如果想显示二进制,按一下"Ctrl-H",就...

c语言基础问题求解 求详细分析此段代码 中a[++1]=2*i+1的意思 急!!
c语言基础问题求解 求详细分析此段代码 中a[++1]=2*i+1的意思 急!!!扫描二维码下载 下载知道APP10分钟有问必答! 建议:可使用微信的“扫一扫”功能扫描下载 分享到: 2013-10-14 12:51 提问者采纳 a[i++]=2*i+1; 这一句实际上可分成以下三步:一、求2*i+1;二、将上面计算的结果赋给a[i];三...

css的这段代码运行结果为什么第二行显示会有背景银色?
我想说,楼上几位的答案有点不正确吧?按你贴出来的代码,第二行不会有背景色的。不行大家把代码放入文件试试。你的代码是正确的。

辛集市13773894757: 用C语言创建一个二叉树 用递归方式进行遍历
舌宙罗西: 中序遍历这是 #include <stdio.h> #include <stdlib.h> typedef struct _btree { int v; struct _btree* l; struct _btree* r; }**btree, *node; node insert(btree r, int v) { node t, p, n; t = (node)malloc(sizeof(_btree)); t->v = v; t->l = t->r = NULL; p = NULL, n = *r; while...

辛集市13773894757: 递归创建二叉树的程序是怎么执行的如下 -
舌宙罗西: 递归只是一种形式,本质还是调用函数,所你你不要一直想着它是递归,就认为建立二叉树的函数是函数A,建立左子树是函数B,建立右子树是函数C,只不过B和C的内容和A一样罢了.那函数内的代码怎么执行?就是自上而下一步一步按顺序执行咯,执行完了建立左子树的函数就会执行建立右子树的函数了,只不过这些函数里面还要再调用函数.对于函数的调用,你就当是把函数里的代码全部嵌入到调用它的地方就好了,然后还是自上而下顺序执行.具体过程你看下面的图好了,由于内容比较多,我把if给省略了,就只写了执行到的部分.

辛集市13773894757: 求C语言题 二叉树递归算法的建立 -
舌宙罗西: void CreateBinTree(BinTree *T) //按前序建立二叉树,数据按前序输入 { char ch; if((ch=getchar())==' ') *T=NULL; else{ *T=(BinTNode*)malloc(sizeof(BinTNode)); (*T)->data=ch; CreateBinTree(&(*T)->lchild); CreateBinTree(&(*T)->rchild); } } 你可以参考一下:http://wenwen.sogou.com/z/q787466401.htm

辛集市13773894757: 求一段简单的建立二叉树的C++代码! -
舌宙罗西: /*---二叉树的建立---*/ BTNode *createbintree() { BTNode *t; char x; scanf("%c",&x); if (x=='#') t=NULL; else { t=(BTNode *)malloc(sizeof(BTNode)); t->data=x; t->lchild=createbintree(); t->rchild=createbintree(); } return(t); }

辛集市13773894757: 我正在编制程序,用两种方法实现二叉树的建立,并用递归算法实现二叉树的先序、中序、后序三种遍历.具体要求:1、 设计程序,按照完全二叉树的层次... -
舌宙罗西:[答案]哗啦啦啦啦啦,我的宝贝 北京欢迎你 像音乐感动你纪敏加 屠洪刚 吴彤

辛集市13773894757: 二叉树先序递归算法(C语言)
舌宙罗西: 因为在定义树时,里面包含了树的指针,那么创建用递归的时候,传递的都是指针的地址,所以就要用指向指针的指针来引用这个地址.不然就会断开与上一层的联系.**t是定义指向指针的指针,用到*t就像你定义指针*t时,使用t一样.既然用了指针,那么在使用函数的时候当然就要用取址符号&取地址进行传递.算法思想...其实就是比较.分为4种情况,第一种是插入节点比根节点小,所以插入节点要成为根节点.第二种是插入节点要放在左节点,因为没有线索化,所以用到返回,返回到先前节点然后再插入、移动.第三种是插入节点要放在右节点,和左节点差不多,只是在插入的时候用到地址不一样,所以分开了.第四种就是插入的节点比原有的节点都大那么就要插入到最后一个节点.

辛集市13773894757: 建立二叉树,并实现先序中序后序,用递归算法 -
舌宙罗西: #include#include typedef char TElemType; typedef struct BiTNode{ TElemType data; /*二叉树数据域*/ struct BiTNode *lchild, *rchild;/* 左右孩子指针*/ }BiTNode, *BiTree;/*二叉树的二叉链表存储表示*/ BiTree CreateBiTree(void)/*按先序次序输...

辛集市13773894757: 求数据结构(C语言版)建立二叉树的代码~~急~~谢谢了 -
舌宙罗西: BT.H文件 #include <stdio.h> #include <malloc.h> #include <conio.h> #define TRUE 1 #define FALSE 0 #define ERROR 0 #define OK 1 #define Stack_Size 50 #define NUM 50 #define MAXSIZE 50 //队列的最大长度 //定义二叉树 typedef char ...

辛集市13773894757: 关于二叉树的递归方法建立二叉树,这个过程是怎么样实现的? -
舌宙罗西: BiTree CreateBiTree() { char p;BiTree T; scanf("%c",&p); if(p==' ') T=NULL; else { T=(BiTNode *)malloc(sizeof(BiTNode)); T->data=p; T->lchild=CreateBiTree(); T->rchild=CreateBiTree(); } return (T); } 就拿这个来说吧,先创建根节点,然后进入递归创建左子树,直到输入的为空格停止创建,再创建这个节点根节点的右子树,在创建这个右子树的左子,一直这样分析下去,不懂联系

辛集市13773894757: 用c语言写二叉树,源代码. -
舌宙罗西: 二叉树是采用递归定义的,实现起来代码简洁(也许并不简单).并且它在具体的计算机科学中有很重要的运用,是一种很重要的数据结构,二叉树有三种遍历和建立的方式.今天先学习一下它的建立和打印.以下代码在Win-Tc1.9.1下编译通...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网