二叉树建树问题_如何输入节点
非常尴尬的一件事情,数据结构机考过程中发现自己建树的程序无法终止输入,如此基础的一个问题竟然到考试还有漏洞,之前一直感觉建树的代码很容易都没有好好自己写输入输出跑一边。
我认为这个问题也有人会遇到还是发出来吧。
可以从if(ch == ’ . )看出输入 . 是把T置为空结束输入,但是问题是只输入一个是不能结束的,是因为二叉树不是线性的他有leftchild和rightchild,把左孩子有孩子以及他们的子节点置空才可以。
最后是代码
#include<stdio.h> #include<stdlib.h> typedef struct BiTNode { char data; struct BiTNode *lchild,*rchild; }BiTNode,*BiTree; void CreatBiTree(BiTree &T) { //前序法创建二叉树 char ch; scanf("%c",&ch); if(ch==.) T=NULL; else { T=(BiTree)malloc(sizeof(BiTNode)); if(!T) exit(1); T->data=ch; CreatBiTree(T->lchild); CreatBiTree(T->rchild); } } void PreTravel(BiTree &T) { //前序遍历 if(T) { printf("%c",T->data); PreTravel(T->lchild); PreTravel(T->rchild); } } void MidTravel(BiTree &T) { //中序遍历 if(T) { MidTravel(T->lchild); printf("%c",T->data); MidTravel(T->rchild); } } void PostTravel(BiTree &T) { //后序遍历 if(T) { PostTravel(T->lchild); PostTravel(T->rchild); printf("%c",T->data); } } int main() { BiTree T; printf("please input the bitree: " ); CreatBiTree(T); /**********************************/ printf("The Pretravel is: "); PreTravel(T); printf(" "); /**********************************/ printf("The Midtravel is: "); MidTravel(T); printf(" "); /**********************************/ printf("The PostTravel is: "); PostTravel(T); printf(" "); }