第一个是头文件:BiTree.h,定义的创建和打印二叉树的函数
#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; /*使用先序遍历创建二叉树*/ void create_bitree(TreeNode *T) { ElementType ch; scanf(" %c",&ch); if(ch!='#') { T=(TreeNode*)malloc(sizeof(TreeNode)); T->data=ch; create_bitree(T->leftchild); create_bitree(T->rightchild); } else { T=NULL; } } /*先序遍历*/ void pre_order_traversal(TreeNode *T) { ElementType data; if(T!=NULL) { data=T->data; printf("%d ",data); pre_order_traversal(T->leftchild); pre_order_traversal(T->rightchild); } } #endif
第二个是主函数:main.c
#include<stdio.h> #include"BiTree.h" int main() { TreeNode *T; T=NULL; printf("type the binary tree with previous order:"); create_bitree(T); pre_order_traversal(T); return 0; }
那个 打印二叉树的函数,我验证过没有问题。我想是不是scanf的问题?
scanf(" %c",&ch);这一句里面的" %c"怎么有个空格?加了空格,输入的时候就要输入空格,不然会出错,这语句完全可以用ch = getchar();代替scanf();通过单步调试慢慢试,监视关键变量,就可以哪里出错了.