資料結構_二叉樹
阿新 • • 發佈:2020-12-29
技術標籤:資料結構(C語言版)C語言資料結構二叉樹實現二叉樹遍歷二叉樹計算深度
#include <stdio.h> #include <stdlib.h> typedef struct BiTNode{ int data; BiTNode *lchild,*rchild; }BiTNode,*BiTree; BiTNode *CreatTree(){ BiTNode *t; int x; scanf("%d",&x); getchar(); if(x==0) t=NULL; else{ t =(BiTree)malloc(sizeof(BiTNode)); t->data=x; printf("請輸入%d結點的左結點:",t->data); t->lchild=CreatTree(); printf("請輸入%d結點的右結點:",t->data); t->rchild=CreatTree(); } return t; } // 先序遍歷 void PreOrder(BiTNode *T){ if(T){ printf("%3d",T->data); PreOrder(T->lchild); PreOrder(T->rchild); } } // 中序遍歷 void InOrder(BiTNode *T){ if(T){ InOrder(T->lchild); printf("%3d",T->data); InOrder(T->rchild); } } // 後序遍歷 void PostOrder(BiTNode *T){ if(T){ PostOrder(T->lchild); PostOrder(T->rchild); printf("%3d",T->data); } } // 層次遍歷 void levelOder(BiTNode *T){ int i,j; BiTNode *q[100],*p; p=T; if(p!=NULL){ i=1; q[i]=p; j=2; } while(i!=j){ p=q[i]; printf("%3d",p->data); if(p->lchild!=NULL){ q[j]=p->lchild; j++; } if(p->rchild!=NULL){ q[j]=p->rchild; j++; } i++; } } // 求葉子數 void LeafNum(BiTNode *T){ if(T){ if(T->lchild==NULL&&T->rchild==NULL)count++; LeafNum(T->lchild); LeafNum(T->rchild); } } // 求結點數 void NodeNum(BiTNode *T){ if(T){ count++; NodeNum(T->lchild); NodeNum(T->rchild); } } // 求樹的深度 void TreeDepth(BiTNode *T){ int ldep,rdep; if(T==NULL)return 0; else{ ldep=TreeDepth(T->lchild); rdep=TreeDepth(T->rchild); if(ldep>rdep)return ldep+1; else return rdep+1; } } int main(){ BiTNode *T=NULL; printf("輸入根節點:"); T=CreatTree(); printf("\n"); PreOrder(T); printf("\n"); InOrder(T); printf("\n"); PostOrder(T); printf("\n"); levelOder(T); }