二叉樹之層次遍歷(一)
阿新 • • 發佈:2019-01-05
這篇層次遍歷用的是遞迴的方法。比較簡單,主要是領悟思想。其主要思想是通過得出樹的深度來遍歷每一層。請看程式碼
//二叉樹層次遍歷 /*遞迴方法*/ //主要難點有2個,1是得到樹的深度,2是迴圈輸出每層的節點 #include<stdio.h> #include<stdlib.h> //建立節點 typedef struct Node{ int data; struct Node *lchild; struct Node *rchild; }Tree_Node,*Tree; //建立樹 Tree CreateTree() { Tree t=NULL; int a; scanf("%d",&a); if(a==-1) { return t; }else{ t=(Tree)malloc(sizeof(Tree_Node)); t->data=a; t->lchild=CreateTree(); t->rchild=CreateTree(); return t; } } int max(int a,int b) { if(a>b) { return a; }else{ return b; } } //求得樹的深度 int depth(Tree &t) { if(t==NULL) { return 0; } return 1+max(depth(t->lchild),depth(t->rchild)); } //輸出每層的節點 void printTree(Tree &t,int lv) { if(t==NULL||lv<0) { return; } if(lv==1) { printf("\t%d",t->data); return; } printTree(t->lchild,lv-1); printTree(t->rchild,lv-1); } int main() { int d; Tree t; t=CreateTree(); d=depth(t); for(int i=1;i<=d;i++) { printTree(t,i); printf("\n"); } return 0; }