資料結構——二叉樹上某層次的葉子結點個數
阿新 • • 發佈:2018-11-22
二叉樹上某層次的葉子結點個數
#include<stdio.h> #include<stdlib.h> #include<string.h> typedef struct Node{ //二叉樹的鏈式儲存結點 char data; int depth; struct Node *Lchild; struct Node *Rchild; }BiTNode,*BiTree; int leaf = 0; void CreateBiTree(BiTree *root){ //形參採用二級指標,實參為結點孩子域地址 char ch; ch=getchar(); if(ch=='#') *root=NULL; else{ *root=(BiTree)malloc(sizeof(BiTree)); (*root)->data=ch; CreateBiTree(&((*root)->Lchild)); CreateBiTree(&((*root)->Rchild)); } } void Visit(BiTree T,int k){ if(T->depth==k){ if(T->Lchild==NULL&&T->Rchild==NULL) leaf++; } } int h=1; //當前T結點所在層次 int depth=0; //記錄當前最大層次 void TreeDepth(BiTree T,int h){ if(T){ T->depth=h; //記錄當前結點的層次 if(h>depth) depth=h; TreeDepth(T->Lchild,h+1); TreeDepth(T->Rchild,h+1); } } void PreOrder(BiTree T,int k){ //先序遞迴遍歷 if(T){ Visit(T,k); PreOrder(T->Lchild,k); PreOrder(T->Rchild,k); } } int main(){ BiTree T; int k=3; CreateBiTree(&T); TreeDepth(T,h); scanf("%d",&k); PreOrder(T,k); printf("%d",leaf); return 0; }