層序生成二叉樹
阿新 • • 發佈:2019-02-16
//假設節點的元素值均為整數,空節點的值為0 //注意,每個 非空節點 的孩子 都要寫出,否則程式無法結束 //下圖的樹,輸入為1 2 3 0 4 5 0 0 0 0 0 ^Z(windows程式結束標誌) #include <stdio.h> #include <stdlib.h> struct BinTreeNode{ int Element; struct BinTreeNode* Left; struct BinTreeNode* Right; }; struct BinTreeNode* CreateBinTree() { int data; struct BinTreeNode* BinTree,*Temp; struct BinTreeNode* Queue[100]; int head=0,tail=0; scanf("%d",&data); if(data==0) return NULL; else{ BinTree=(struct BinTreeNode*)malloc(sizeof(struct BinTreeNode)); BinTree->Element=data; BinTree->Left=NULL; BinTree->Right=NULL; Queue[tail++]=BinTree; } while(head<tail){ scanf("%d",&data); if(data==0){ Queue[head]->Left=NULL;//空節點不入隊 } else{ Temp=(struct BinTreeNode*)malloc(sizeof(struct BinTreeNode)); Temp->Element=data; Temp->Left=NULL; Temp->Right=NULL; Queue[head]->Left=Temp; Queue[tail++]=Temp; } scanf("%d",&data); if(data==0){ Queue[head]->Right=NULL;//空節點不入隊 } else{ Temp=(struct BinTreeNode*)malloc(sizeof(struct BinTreeNode)); Temp->Element=data; Temp->Left=NULL; Temp->Right=NULL; Queue[head]->Right=Temp; Queue[tail++]=Temp; } head++; } return BinTree; } void InOrderTrversal(struct BinTreeNode* BinTree) { if(BinTree==NULL) return; if(BinTree->Left!=NULL) InOrderTrversal(BinTree->Left); printf("%d ",BinTree->Element); if(BinTree->Right!=NULL) InOrderTrversal(BinTree->Right); return; } int main() { struct BinTreeNode* BinTree; BinTree=CreateBinTree(); InOrderTrversal(BinTree); return 0; }