#include
#include
#include //head file
typedef struct BiNode{
char data;
struct BiNode *lchild,*rchild;
}BiTNode,*BiTree;//data and stucture
void InitBiTree(BiTree T){
T=NULL;//input
}
void Create(BiTree &T)
{
char ch[2];
scanf("%s",&ch[0]);
if(strcmp(ch,"@")==0) {
T=NULL;
}else{
T=(BiTree)malloc(sizeof(BiNode));
T->data=ch[0];
Create(T->lchild);
Create(T->rchild);
}
}
void visit(char c){
printf("%c",c);
}
void PreOrderTraverse(BiTree T){
if(T){
visit(T->data);
PreOrderTraverse(T->lchild);
PreOrderTraverse(T->rchild);
}
}
void InOrderTraverse(BiTree T){
if(T){
InOrderTraverse(T->lchild);
visit(T->data);
InOrderTraverse(T->rchild);
}
}
void PostOrderTraverse(BiTree T){
if(T){
PostOrderTraverse(T->lchild);
PostOrderTraverse(T->rchild);
visit(T->data);
}
}
int depth(BiTree T){
int ldeep,rdeep;
if(!T) return 0;
else{
ldeep=depth(T->lchild);
rdeep=depth(T->rchild);
return ldeep>rdeep?ldeep:rdeep+1;
}
}
int main(){
BiTree T;
int deep;
InitBiTree(T);
printf("請輸入序列\n");
Create(T);
deep=depth(T);
printf("\n深度:%d\n二叉樹構建完畢",deep);
printf("\n先序遍歷二叉樹:");
PreOrderTraverse(T);
printf("\n中序遍歷二叉樹:");
InOrderTraverse(T);
printf("\n後序遍歷二叉樹:");
PostOrderTraverse(T);
return 0;
}
這個建立二叉樹的輸入語句哪裡不對嘛?輸入的內容是12@@3@@。
輸入之後並沒有什麼反應,並非機子的問題。
除了輸入的問題,是不是還有其他的問題在呢?比如說其他版塊是不是出錯了呢?
煩請指教。
你的輸入不對。
scanf("%s",&ch[0]);應該改成scanf("%1s",&ch[0]);才行
#include <stdio.h>
#include <stdlib.h>
#include <string.h>//head file
typedef struct BiNode{
char data;
struct BiNode *lchild, *rchild;
}BiTNode, *BiTree;//data and stucture
void InitBiTree(BiTree &T){
T = NULL;//input
}
void Create(BiTree &T)
{
char ch[2];
scanf("%1s", &ch[0]);
if (strcmp(ch, "@") == 0) {
T = NULL;
}
else{
T = (BiTree)malloc(sizeof(BiNode));
T->data = ch[0];
Create(T->lchild);
Create(T->rchild);
}
}
void visit(char c){
printf("%c", c);
}
void PreOrderTraverse(BiTree T){
if (T){
visit(T->data);
PreOrderTraverse(T->lchild);
PreOrderTraverse(T->rchild);
}
}
void InOrderTraverse(BiTree T){
if (T){
InOrderTraverse(T->lchild);
visit(T->data);
InOrderTraverse(T->rchild);
}
}
void PostOrderTraverse(BiTree T){
if (T){
PostOrderTraverse(T->lchild);
PostOrderTraverse(T->rchild);
visit(T->data);
}
}
int depth(BiTree T){
int ldeep, rdeep;
if (!T) return 0;
else{
ldeep = depth(T->lchild);
rdeep = depth(T->rchild);
return ldeep>rdeep ? ldeep : rdeep + 1;
}
}
int main(){
BiTree T;
int deep;
InitBiTree(T);
printf("請輸入序列\n");
Create(T);
deep = depth(T);
printf("\n深度:%d\n二叉樹構建完畢", deep);
printf("\n先序遍歷二叉樹:");
PreOrderTraverse(T);
printf("\n中序遍歷二叉樹:");
InOrderTraverse(T);
printf("\n後序遍歷二叉樹:");
PostOrderTraverse(T);
return 0;
}