该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

void CreatBiTree(BiTree T)

{

char a;

scanf("%c",&a);

if(a=='@')

T=NULL;

else

{

T=(BiTree)malloc(sizeof(BiNode));

T->data=a;

CreatBiTree(T->lchild);

CreatBiTree(T->rchild);

}

}

虽能编译,但不能正确运行,冥思苦想n小时,未果

遂改其为

BiTree CreatBiTree()

{

char a;

BiTree T;

scanf("%c",&a);

if(a=='@')

T=NULL;

else

{

T=(BiTree)malloc(sizeof(BiNode));

T->data=a;

T->lchild=CreatBiTree();

T->rchild=CreatBiTree();

}

return T;

}

不再用传递参数,用返回值,正确编译运行,喜。

重审前程序,改为

void CreatBiTree(BiTree *T)

{

char a;

scanf("%c",&a);

if(a=='@')

*T=NULL;

else

{

*T=(BiTree)malloc(sizeof(BiNode));

(*T)->data=a;

CreatBiTree(&((*T)->lchild));

CreatBiTree(&((*T)->rchild));

}

}

正确编译运行,惑。

又冥思苦想n小时,终于悟出其中原由(好象多难似的,或者其实是我太愚钝)

原来还是对指针的理解不够深刻

最开始的程序传递的是Node型结构体的指针,于是在函数中会生成一个形参也指向这个结构体,但在函数中有一句T=(BiTree)malloc(sizeof(BiNode)); 改变了形参的指向,以后再对形参的任何操作不会在主函数中的T产生影响。

下面是两个完整的程序,分别用的两种建树方法

#include "stdlib.h"

#include "conio.h"

typedef struct node

{

char data;

struct node *lchild,*rchild;

}BiNode,*BiTree;

BiTree CreatBiTree()

{

char a;

BiTree T;

scanf("%c",&a);

if(a=='@')

T=NULL;

else

{

T=(BiTree)malloc(sizeof(BiNode));

T->data=a;

T->lchild=CreatBiTree();

T->rchild=CreatBiTree();

}

return T;

}

void PreOrderTraverse(BiTree T)

{

if(T)

{

printf("%c",T->data);

PreOrderTraverse(T->lchild);

PreOrderTraverse(T->rchild);

}

}

void InOrderTraverse(BiTree T)

{

if(T)

{

InOrderTraverse(T->lchild);

printf("%c",T->data);

InOrderTraverse(T->rchild);

}

}

void PostOrderTraverse(BiTree T)

{

if(T)

{

PostOrderTraverse(T->lchild);

PostOrderTraverse(T->rchild);

printf("%c",T->data);

}

}

main()

{

BiTree T;

clrscr();

T=CreatBiTree();

PreOrderTraverse(T);

printf("\n");

InOrderTraverse(T);

printf("\n");

PostOrderTraverse(T);

}

#include "stdlib.h"

#include "conio.h"

typedef struct node

{

char data;

struct node *lchild,*rchild;

}BiNode,*BiTree;

void CreatBiTree(BiTree *T)

{

char a;

scanf("%c",&a);

if(a=='@')

*T=NULL;

else

{

*T=(BiTree)malloc(sizeof(BiNode));

(*T)->data=a;

CreatBiTree(&((*T)->lchild));

CreatBiTree(&((*T)->rchild));

}

}

void PreOrderTraverse(BiTree T)

{

if(T)

{

printf("%c",T->data);

PreOrderTraverse(T->lchild);

PreOrderTraverse(T->rchild);

}

}

void InOrderTraverse(BiTree T)

{

if(T)

{

InOrderTraverse(T->lchild);

printf("%c",T->data);

InOrderTraverse(T->rchild);

}

}

void PostOrderTraverse(BiTree T)

{

if(T)

{

PostOrderTraverse(T->lchild);

PostOrderTraverse(T->rchild);

printf("%c",T->data);

}

}

main()

{

BiTree T;

clrscr();

CreatBiTree(&T);

PreOrderTraverse(T);

printf("\n");

InOrderTraverse(T);

printf("\n");

PostOrderTraverse(T);

}

更多数据结构实例http://hi.baidu.com/longzuo

C语言六叉树,递归创建二叉树c语言实现+详细解释相关推荐

  1. c语言创建树,递归创建二叉树c语言实现+详细解释

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 void CreatBiTree(BiTree T) { char a; scanf("%c",&a); if(a=='@') ...

  2. c语言链表创建递归,递归创建二叉树c语言实现+详细解释

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 void CreatBiTree(BiTree T) { char a; scanf("%c",&a); if(a=='@') ...

  3. c语言构造满二叉树,递归创建二叉树c语言实现+详细解释

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 void CreatBiTree(BiTree T) { char a; scanf("%c",&a); if(a=='@') ...

  4. 如何创造char二叉树C语言,递归创建二叉树c语言实现+详细解释

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 void CreatBiTree(BiTree T) { char a; scanf("%c",&a); if(a=='@') ...

  5. c语言递归建链表,递归创建二叉树c语言实现+详细解释

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 void CreatBiTree(BiTree T) { char a; scanf("%c",&a); if(a=='@') ...

  6. 二叉树的递归遍历算法c语言 数据结构,递归创建二叉树c语言实现+详细解释

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 void CreatBiTree(BiTree T) { char a; scanf("%c",&a); if(a=='@') ...

  7. 二叉树构造c语言实现,递归创建二叉树c语言实现+详细解释

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 void CreatBiTree(BiTree T) { char a; scanf("%c",&a); if(a=='@') ...

  8. 二叉树学习笔记之利用前序遍历递归创建二叉树

    利用前序遍历创建二叉树 树的遍历 前序遍历(preorder traversal) 利用前序遍历创建二叉树 中序遍历访问所有结点 前序遍历访问所有结点 后序遍历访问所有结点 实例 树的遍历 树的遍历是 ...

  9. 先根序列创建二叉树c语言,用C语言创建二叉树并先序遍历.doc

    用C语言创建二叉树并先序遍历 用C语言创建二叉树并 #include "stdio.h" #include "stdlib.h" typedef struct ...

最新文章

  1. 算术运算中隐式类型转换
  2. python 正则 去除字符串中异常字符
  3. MATLAB应用实战系列(五十二)-Excel数据的读取
  4. os.path.join的妙用
  5. LTE TDD的特殊子帧
  6. One order event display tool
  7. 取余运算||快速幂(洛谷-P1226)
  8. 使用Nginx在windows和linux上搭建集群
  9. android 回退函数,android浏览器研究-回退和前进
  10. IDEA2019.3 双击启动无反应解决方法
  11. 用异常来处理错误----第二节 异常管理的优势
  12. MFI认证——什么是苹果MFI认证
  13. 计算机学院早操规定,宜宾学院早操管理规定
  14. 服务器3D场景建模(三):体素场景(一)
  15. win7 Host 与virtualbox 中的 ubuntu 11.04 共享文件夹
  16. H5中的history单页面,手动实现单页面开发,细说h5单页面原理
  17. 二进制加权电容器阵列的构建公共质心布局和布线
  18. Unity 百度智能对话API
  19. 基于web的小票打印
  20. 自制IDEAWebStorm主题,轻仿VsCode-One Dark Pro

热门文章

  1. WPF中在XAML中实现数据类型转换的两种方法
  2. BZOJ1729: [Usaco2005 dec]Cow Patterns 牛的模式匹配
  3. Visual Studio 2015 单元测试(c++初试)
  4. 多线程中线程参数的传递,不要使用局部变量
  5. UIViewAnimationOptions
  6. 自动检查点(Automatic Checkpointing)
  7. node.js通过edge访问.net动态链接库
  8. EL表达式---自定义函数(转)
  9. Flutter 一个电话样式小控件
  10. Web前端开发——BAT面试题汇总及答案01