创建二叉树,C语言实现
2013-09-04 15:46
309 查看
一、前序遍历创建二叉树,使用递归,头文件 BiTree.h
有两个地方需要注意:1、要将树的节点指针作为返回值返回,而不能向下面这样直接作为参数传入,因为作为参数传递时只是传递了T 的一个copy,后来调用malloc函数分配新的内存地址时,也是赋给了这个备份,也就是说最后T依然没有改变,碰到malloc和指针做参数都要注意这个问题;2、scanf函数的问题:scanf会读入回车符,当需要一个一个的输入字符时,可以在%c前面加个空格
/*槽点一:创建树时用scanf输入不成功*/ #ifndef BITREE_H #define BITREE_H #include<stdio.h> #include<stdlib.h> typedef char ElementType; typedef struct treenode { ElementType data; struct treenode *leftchild; struct treenode *rightchild; } TreeNode; /*使用先序遍历创建二叉树*/ TreeNode *create_bitree() { ElementType ch; TreeNode *T; scanf("%c",&ch); //这样调用scanf时,树的结点一次全部输入,如果要一次一个的输入,在%c前加个空格 if(ch!='#') { T=(TreeNode*)malloc(sizeof(TreeNode)); T->data=ch; T->leftchild=create_bitree(); T->rightchild=create_bitree(); } else { T=NULL; } return T; } /*先序遍历*/ void pre_order_traversal(TreeNode *T) { ElementType data; if(T!=NULL) { data=T->data; printf("%c ",data); pre_order_traversal(T->leftchild); pre_order_traversal(T->rightchild); } } #endif
有两个地方需要注意:1、要将树的节点指针作为返回值返回,而不能向下面这样直接作为参数传入,因为作为参数传递时只是传递了T 的一个copy,后来调用malloc函数分配新的内存地址时,也是赋给了这个备份,也就是说最后T依然没有改变,碰到malloc和指针做参数都要注意这个问题;2、scanf函数的问题:scanf会读入回车符,当需要一个一个的输入字符时,可以在%c前面加个空格
int create_bitree(TreeNode *T;) { ElementType ch; scanf("%c",&ch); //这样调用scanf时,树的结点一次全部输入,如果要一次一个的输入,在%c前加个空格 if(ch!='#') { T=(TreeNode*)malloc(sizeof(TreeNode)); T->data=ch; create_bitree(T->leftchild); create_bitree(T->rightchild); } else { T=NULL; } return 1; }
相关文章推荐
- 二叉树的创建与遍历(C语言实现)
- 二叉树创建、遍历、求深度--C语言实现
- 用c语言创建一颗二叉树,用递归方法实现对其进行先序、中序和后序遍历的操作。
- C语言实现二叉树的基本操作---创建、遍历、求深度、求叶子结点
- 二叉树的创建、前序中序后序递归遍历与非递归遍历、层序遍历以及二叉树简单应用的C语言实现
- 二叉树的创建、前/中/后序遍历、按层遍历C语言实现
- C语言实现二叉树的基本操作---创建、遍历、求深度、求叶子结点
- c语言实现二叉树的遍历和创建程序(附带注释)
- 二叉树的创建和遍历-C语言实现
- 创建二叉树,C语言实现
- java实现二叉树的创建以及遍历
- C语言实现中序线索化二叉树并遍历
- C语言实现二叉树的递归和非递归算法的基本操作
- 二叉树的创建与前序中序后序遍历的递归实现
- 中序二叉树、队列实现层次遍历、中序线索二叉树的创建与遍历
- 数据结构 — 二叉树(创建、遍历)java实现
- 二叉树的C语言实现
- 先序遍历创建二叉树,对二叉树统计叶子节点个数和统计深度(创建二叉树时#代表空树,序列不能有误)c语言
- <二叉树 前中后 层序 非递归遍历 c语言实现>
- 学习笔记——C语言实现单链表的基本操作:创建、输出、插入结点、删除结点、逆序链表