user-0 提问: 利用线索二叉树进行查找树中的某个结点，求大神们看看，在线等急急急

回复:
user: user-0
content: 引用 2 楼 paschen的回复:t->lchild = (*s)->data 这种赋值将导致错误，右边是char类型，左边是tree*类型，完全不同的两种类型 非常感谢！那应该该怎么改？

user: user-1
content: t->lchild = (*s)->data 这种赋值将导致错误，右边是char类型，左边是tree*类型，完全不同的两种类型

user: user-2
content: 崩溃的时候在弹出的对话框按相应按钮进入调试，按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处，看不懂时双击下一行，直到能看懂为止。

user: user-3
content: 这个可以了  #include "stdio.h"     #include "stdlib.h" #include "memory.h" #define  FALSE 0 #define  TRUE  1 typedef struct tree   {      	char data;     	struct tree *lchild;     	struct tree *rchild; 	char s;  }*Ptree;     Ptree createTree()   //树的建立   {     	char ch;     	Ptree t;     	ch=getchar();  //输入二叉树数据  	if( ch == ' ' || ch == '\n' || ch == '\r' || ch == '\0')  //判断二叉树是否为空   	{ 		t=NULL; 	} 	else    	{     		t=(Ptree)malloc(sizeof(tree));  //二叉树的生成   		memset(t, 0, sizeof(tree)); 		t->data=ch;     		t->lchild=createTree(); // 这里递归调用会导致输入大量的空格才能结束 		t->rchild=createTree(); // 这里递归调用会导致输入大量的空格才能结束 	} 	return t; }      void preOrder(Ptree t)  //先序遍历    {     	if(t)     	{       		printf("%c",t->data);     		preOrder(t->lchild);     		preOrder(t->rchild);     	}     }      void intOrder(Ptree t)  //中序遍历     {     	if(t)     	{     		intOrder(t->lchild);     		printf("%c",t->data);     		intOrder(t->rchild);     	}     }      void postOrder(Ptree t)  //后序遍历     {     	if(t)     	{        		postOrder(t->lchild);     		postOrder(t->rchild);    		printf("%c",t->data);     	}     }      int Find(Ptree s, char chFind)  { 	if(s->data == chFind)  	{ 		return TRUE; 	} 	else if (Find(s->lchild, chFind))  	{ 		return TRUE; 	} 	else  	{ 		return Find(s->rchild, chFind); 	} }   int main()     {   	Ptree t; 	char chFind; 	printf("先序创建二叉树,用空格代表虚结点：\n");   	t=createTree();    	printf("前序遍历\n");   	preOrder(t) ;   	printf("\n");   	printf("中序遍历：\n");   	intOrder(t);   	printf("\n");   	printf("后序遍历：\n");     	postOrder(t);     	printf("\n"); 	printf("请输入要查找的结点:\n"); 	while(1)  // 防止前面输入的空格，结束符过多引起查找非法字符 	{ 		chFind=getchar (); 		if (chFind != ' ' && chFind != '\r' && chFind != '\n' && chFind !='\0')  		{ 			printf("查找 %c\n", chFind); 			break; 		} 	} 	 	if (Find(t, chFind))  	{ 		printf("找到\n"); 	} 	else  	{ 		printf("未找到\n"); 	} 	system("pause");   }

user: user-4
content: 问题列表如下： 问题1：createTree()函数内： t=(Ptree)malloc(sizeof(struct tree));  //malloc struct tree 这儿应该申请struct tree，而不是Ptree，因为Ptree是指针； 问题2：find函数内，t是局部变量并且没有初始化，属于野指针，因此不能操作t->data， t->lchild等 二叉树的根指针应该通过参数传进来；另外，find函数返回bool类型，但是调用时没有意义，没有使用返回值。 是不是还没完全写完的程序？！  问题3：main函数里，s是Ptree类型，而getchar();是返回char类型；  #include <stdio.h> #include <stdlib.h> #define  FALSE 0 #define  TRUE  1 typedef struct tree {      char data;     struct tree *lchild;     struct tree *rchild;     char s;  }*Ptree;  Ptree createTree()   //树的建立 {     char ch;     Ptree t;     ch=getchar();  //输入二叉树数据      if(ch == ' ')  //判断二叉树是否为空         t = NULL;     else     {         t=(Ptree)malloc(sizeof(struct tree));  //malloc struct tree         t->data = ch;         t->lchild=createTree();         t->rchild=createTree();     }     return t; }  void preOrder(Ptree t)  //先序遍历 {     if(t)     {         printf("%c",t->data);         preOrder(t->lchild);         preOrder(t->rchild);     } }  void intOrder(Ptree t)  //中序遍历 {     if(t)     {         intOrder(t->lchild);         printf("%c",t->data);         intOrder(t->rchild);     } }  void postOrder(Ptree t)  //后序遍历 {     if(t)     {         postOrder(t->lchild);         postOrder(t->rchild);         printf("%c",t->data);     } }  int Find(Ptree t, char s) {     if (!t)         return FALSE;     else if (t->data == s)         return TRUE;     else {         return Find(t->lchild, s);         return Find(t->rchild, s);     } }   int main() {     char s;     Ptree t;     printf("先序创建二叉树,用空格代表虚结点：\n");     t=createTree();     printf("前序遍历\n");     preOrder(t) ;     printf("\n");     printf("中序遍历：\n");     intOrder(t);     printf("\n");     printf("后序遍历：\n");     postOrder(t);     printf("\n");     printf("请输入要查找的结点:\n");     s = getchar ();     int ret = Find(t, s);     if (ret)         printf("Yes!\n");     else         printf("No\n");     system("pause");     return 0; }  参考一下吧

user: user-0
content: 希望大神看看，求指导