user-0 提问: 关于创建遍历二叉树

回复:
user: user-0
content: 引用 5 楼 paschen 的回复:我不知你要输入什么  我帮你调试时输入 1 2 3 0 0 0 0 ，输出了结果123  不知你要问什么  你能输出吗我怎么不行 就是要把数据放进二叉树里面输入0表示输入结束  然后遍历二叉树打印出来

user: user-0
content: 引用 4 楼 qq423399099 的回复:代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。 你能输出吗我怎么不行 就是要把数据放进二叉树里面输入0表示输入结束  然后遍历二叉树打印出来

user: user-1

user: user-2
content: 我不知你要输入什么  我帮你调试时输入 1 2 3 0 0 0 0 ，输出了结果123  不知你要问什么

user: user-0
content: 引用 1 楼 qq_36409192 的回复:#include<iostream> using namespace std;  typedef struct node { 	struct node *leftChild; 	struct node *rightChild; 	char data; }BiTreeNode, *BiTree;  void createBiTree(BiTree &T) { 	char c; 	cin >> c; 	if('#' == c) 		T = NULL; 	else 	{ 		T = new BiTreeNode; 		T->data = c; 		createBiTree(T->leftChild); 		createBiTree(T->rightChild); 	} }  // 先序遍历 void preOrderTraverse(BiTree T) { 	if(T) 	{ 		cout << T->data << " "; 		preOrderTraverse(T->leftChild); 		preOrderTraverse(T->rightChild); 	} }   // 中序遍历 void inOrderTraverse(BiTree T) { 	if(T) 	{ 		inOrderTraverse(T->leftChild); 		cout << T->data << " "; 		inOrderTraverse(T->rightChild); 	} }  // 后序遍历 void postOrderTraverse(BiTree T) { 	if(T) 	{ 		postOrderTraverse(T->leftChild); 		postOrderTraverse(T->rightChild); 		cout << T->data << " "; 	} }  int main() { 	BiTree T; 	createBiTree(T); 	cout << "先序遍历:" << endl; 	preOrderTraverse(T); 	cout << endl << endl; 	 	cout << "中序遍历:" << endl; 	inOrderTraverse(T); 	cout << endl << endl; 	 	cout << "后序遍历:" << endl; 	postOrderTraverse(T); 	cout << endl << endl;  	return 0; }  我就照着这个帖子来的结果就是打印不出来结果编译能过去

user: user-3
content: 代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。

user: user-4
content: 引用 2 楼 qq_36151474的回复:[quote=引用 1 楼 qq_36409192 的回复:] #include<iostream> using namespace std;  typedef struct node { 	struct node *leftChild; 	struct node *rightChild; 	char data; }BiTreeNode, *BiTree;  void createBiTree(BiTree &T) { 	char c; 	cin >> c; 	if('#' == c) 		T = NULL; 	else 	{ 		T = new BiTreeNode; 		T->data = c; 		createBiTree(T->leftChild); 		createBiTree(T->rightChild); 	} }  // 先序遍历 void preOrderTraverse(BiTree T) { 	if(T) 	{ 		cout << T->data << " "; 		preOrderTraverse(T->leftChild); 		preOrderTraverse(T->rightChild); 	} }   // 中序遍历 void inOrderTraverse(BiTree T) { 	if(T) 	{ 		inOrderTraverse(T->leftChild); 		cout << T->data << " "; 		inOrderTraverse(T->rightChild); 	} }  // 后序遍历 void postOrderTraverse(BiTree T) { 	if(T) 	{ 		postOrderTraverse(T->leftChild); 		postOrderTraverse(T->rightChild); 		cout << T->data << " "; 	} }  int main() { 	BiTree T; 	createBiTree(T); 	cout << "先序遍历:" << endl; 	preOrderTraverse(T); 	cout << endl << endl; 	 	cout << "中序遍历:" << endl; 	inOrderTraverse(T); 	cout << endl << endl; 	 	cout << "后序遍历:" << endl; 	postOrderTraverse(T); 	cout << endl << endl;  	return 0; }  我就照着这个帖子来的结果就是打印不出来结果编译能过去[/quote] 你把我发的和你的对比一下就知道问题出在哪里了。。

user: user-5
content: 再供参考：//1 2 3 //4 5 6 求一笔划过所有9个键的所有方法 //7 8 9 #include <stdio.h> int g[10][9]={     {0,0,0,0,0,0,0,0,0},     {2,4,5,0,0,0,0,0,0},//1     {1,3,4,5,6,0,0,0,0},//2     {2,5,6,0,0,0,0,0,0},//3     {1,2,5,7,8,0,0,0,0},//4     {1,2,3,4,6,7,8,9,0},//5     {2,3,5,8,9,0,0,0,0},//6     {4,5,8,0,0,0,0,0,0},//7     {4,5,6,7,9,0,0,0,0},//8     {5,6,8,0,0,0,0,0,0},//9 }; int k,i,n; int h[10];//记录是否划过h[1..9],history int p[10];//记录划的顺序p[1..9],path void go(int f,int L) {     int j;      if (L==9) {         p[L]=f;         n++;         printf("%08d:",n);         for (i=1;i<=9;i++) printf(" %d",p[i]);         printf("\n");     } else {         p[L]=f;         h[f]=1;         j=0;         while (1) {             if (g[f][j]==0) break;             if (h[g[f][j]]==0) {                 go(g[f][j],L+1);                 h[g[f][j]]=0;             }             j++;         }     } } int main() {     n=0;     for (k=1;k<=9;k++) {         for (i=1;i<=9;i++) h[i]=0;         go(k,1);     }     return 0; } //00000001: 1 2 3 5 4 7 8 6 9 //00000002: 1 2 3 5 4 7 8 9 6 //00000003: 1 2 3 5 6 9 8 4 7 //00000004: 1 2 3 5 6 9 8 7 4 //00000005: 1 2 3 5 7 4 8 6 9 //00000006: 1 2 3 5 7 4 8 9 6 //00000007: 1 2 3 5 9 6 8 4 7 //00000008: 1 2 3 5 9 6 8 7 4 //00000009: 1 2 3 6 5 4 7 8 9 //00000010: 1 2 3 6 5 7 4 8 9 //00000011: 1 2 3 6 5 9 8 4 7 //00000012: 1 2 3 6 5 9 8 7 4 //00000013: 1 2 3 6 8 4 7 5 9 //00000014: 1 2 3 6 8 7 4 5 9 //00000015: 1 2 3 6 8 9 5 4 7 //00000016: 1 2 3 6 8 9 5 7 4 //00000017: 1 2 3 6 9 5 4 7 8 //00000018: 1 2 3 6 9 5 4 8 7 //00000019: 1 2 3 6 9 5 7 4 8 //00000020: 1 2 3 6 9 5 7 8 4 //00000021: 1 2 3 6 9 5 8 4 7 //00000022: 1 2 3 6 9 5 8 7 4 //00000023: 1 2 3 6 9 8 4 5 7 //00000024: 1 2 3 6 9 8 4 7 5 //00000025: 1 2 3 6 9 8 5 4 7 //00000026: 1 2 3 6 9 8 5 7 4 //00000027: 1 2 3 6 9 8 7 4 5 //00000028: 1 2 3 6 9 8 7 5 4 //00000029: 1 2 4 5 3 6 9 8 7 //00000030: 1 2 4 5 7 8 9 6 3 //00000031: 1 2 4 7 5 3 6 8 9 //00000032: 1 2 4 7 5 3 6 9 8 //00000033: 1 2 4 7 5 8 9 6 3 //00000034: 1 2 4 7 5 9 8 6 3 //00000035: 1 2 4 7 8 5 3 6 9 //00000036: 1 2 4 7 8 5 9 6 3 //00000037: 1 2 4 7 8 6 3 5 9 //00000038: 1 2 4 7 8 6 9 5 3 //00000039: 1 2 4 7 8 9 5 3 6 //00000040: 1 2 4 7 8 9 5 6 3 //00000041: 1 2 4 7 8 9 6 3 5 //00000042: 1 2 4 7 8 9 6 5 3 //00000043: 1 2 4 8 7 5 3 6 9 //00000044: 1 2 4 8 7 5 9 6 3 //00000045: 1 2 4 8 9 6 3 5 7 //00000046: 1 2 5 3 6 9 8 4 7 //00000047: 1 2 5 3 6 9 8 7 4 //00000048: 1 2 5 4 7 8 9 6 3 //00000049: 1 2 5 7 4 8 9 6 3 //00000050: 1 2 6 3 5 4 7 8 9 //00000051: 1 2 6 3 5 7 4 8 9 //00000052: 1 2 6 3 5 9 8 4 7 //00000053: 1 2 6 3 5 9 8 7 4 //00000054: 1 2 6 9 8 4 7 5 3 //00000055: 1 2 6 9 8 7 4 5 3 //00000056: 1 4 2 3 5 6 9 8 7 //... ... //00000776: 9 8 7 4 5 6 3 2 1 //00000777: 9 8 7 5 1 4 2 3 6 //00000778: 9 8 7 5 1 4 2 6 3 //00000779: 9 8 7 5 3 6 2 1 4 //00000780: 9 8 7 5 3 6 2 4 1 //00000781: 9 8 7 5 4 1 2 3 6 //00000782: 9 8 7 5 4 1 2 6 3 //00000783: 9 8 7 5 6 3 2 1 4 //00000784: 9 8 7 5 6 3 2 4 1

user: user-5
content: “给定一个小点的输入，完整单步跟踪(同时按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史)一遍。”是理解递归函数工作原理的不二法门！ 递归函数关注以下几个因素 ·退出条件 ·参数有哪些 ·返回值是什么 ·局部变量有哪些 ·全局变量有哪些 ·何时输出 ·会不会导致堆栈溢出

user: user-5
content: 仅供参考：//每一步只能迈上1个或2个台阶。先迈左脚，然后左右交替，最后一步是迈右脚，也就是说一共要走偶数步。那么，上完39级台阶，有多少种不同的上法呢？ //------------------------------------------------------- //状态c[i][0]表示走到第i个楼梯时最后一步是左脚的方法数，c[i][1]是右脚的方法数。。 //那么，由于每一步能上一到两级，c[i][0] = c[i-1][1]+c[i-2][1](因为最后一步为左脚， //倒数第二步肯定为右脚。。)。。然后一直递推。。最后c[39][1]即上到第39级而且是右脚的方法数即为答案。 #include <stdio.h> int c[40][2];//0为左脚，1为右脚。。 int main(){     int i;     c[0][0] = c[1][1] = 0;     c[0][1] = c[1][0] = 1;     for(i = 2; i <= 39; ++i){         c[i][0] = c[i - 1][1] + c[i - 2][1];         c[i][1] = c[i - 1][0] + c[i - 2][0];     }     printf("%d\n", c[39][1]);     return 0; } //------------------------------------------------------- //走到第n级台阶的时候，他的上一步不是在n-1级就是在n-2级上， // f(n) = f(n - 1) + f(n - 2) 很简单的递归思想 int num=0; void fun(int n,int step) {   if(n<0)     return;   if(n==0)   {     if(step%2==0) num++;     return;    }    fun(n-1,step+1);    fun(n-2,step+1); } void main() {   fun(39,0);   printf("%d",num); } //------------------------------------------------------- int aux(int steps, int cnt) {     if (steps <= 0)     {         if (0 == steps && (cnt && !(cnt % 2)))             return 1;         return 0;     }     return aux(steps - 1, cnt + 1) + aux(steps - 2, cnt + 1); }<br> inline int func(steps) {     return aux(steps, 0); } //------------------------------------------------------- #include <stdio.h> static int trace[40]; static int count=0; void go(int, int, int); int main() {         go(39, 0, 1);         go(39, 0, 2);         printf("count=%d\n",count); } // // left: left steps // mt:   mount_times // step: steps of current movement // void go(int left, int mt, int step) {     int i;     if(left < 0)return;     if(left == 0){         if(!(mt%2)&&(step==1)){             /* 用来记录小明的脚步，当然题目里并不要求我们记下来。             for(i=0;i<mt;i++){                     printf("%3d",trace[i]);             }             printf("\n");             for(i=mt;i<sizeof(trace);i++){                     trace[i]=0;             }             */             count++;         }         return;     }     trace[mt] = step;     left -= step;     mt++;     go(left, mt, 1);     go(left, mt, 2); }

user: user-0
content: 引用 9 楼 paschen 的回复:[quote=引用 8 楼 qq_36151474 的回复:] [quote=引用 5 楼 paschen 的回复:] 我不知你要输入什么  我帮你调试时输入 1 2 3 0 0 0 0 ，输出了结果123  不知你要问什么  你能输出吗我怎么不行 就是要把数据放进二叉树里面输入0表示输入结束  然后遍历二叉树打印出来[/quote]  能输出啊，给个你输入的截图看下[/quote]  奥大哥我理解错了这样输如才行可以输出，能不能麻烦你帮忙看下这个题，我知道要用到数据结构二叉树，但是具体下来就不知道怎么办了

user: user-2
content: 引用 8 楼 qq_36151474 的回复:[quote=引用 5 楼 paschen 的回复:] 我不知你要输入什么  我帮你调试时输入 1 2 3 0 0 0 0 ，输出了结果123  不知你要问什么  你能输出吗我怎么不行 就是要把数据放进二叉树里面输入0表示输入结束  然后遍历二叉树打印出来[/quote]  能输出啊，给个你输入的截图看下

user: user-4
content: #include<iostream> using namespace std;  typedef struct node { 	struct node *leftChild; 	struct node *rightChild; 	char data; }BiTreeNode, *BiTree;  void createBiTree(BiTree &T) { 	char c; 	cin >> c; 	if('#' == c) 		T = NULL; 	else 	{ 		T = new BiTreeNode; 		T->data = c; 		createBiTree(T->leftChild); 		createBiTree(T->rightChild); 	} }  // 先序遍历 void preOrderTraverse(BiTree T) { 	if(T) 	{ 		cout << T->data << " "; 		preOrderTraverse(T->leftChild); 		preOrderTraverse(T->rightChild); 	} }   // 中序遍历 void inOrderTraverse(BiTree T) { 	if(T) 	{ 		inOrderTraverse(T->leftChild); 		cout << T->data << " "; 		inOrderTraverse(T->rightChild); 	} }  // 后序遍历 void postOrderTraverse(BiTree T) { 	if(T) 	{ 		postOrderTraverse(T->leftChild); 		postOrderTraverse(T->rightChild); 		cout << T->data << " "; 	} }  int main() { 	BiTree T; 	createBiTree(T); 	cout << "先序遍历:" << endl; 	preOrderTraverse(T); 	cout << endl << endl; 	 	cout << "中序遍历:" << endl; 	inOrderTraverse(T); 	cout << endl << endl; 	 	cout << "后序遍历:" << endl; 	postOrderTraverse(T); 	cout << endl << endl;  	return 0; }