求二叉樹第K層的葉子節點的個數(假設根節點是第一層)
阿新 • • 發佈:2018-11-14
演算法思想:採用佇列結構按層次遍歷,遍歷K層時記錄葉子的個數
int LeafKlevel(BiTree bt, int k){ //求二叉樹bt的第k(k >1)層上葉子的節點個數 if(bt == NULL || k < 1) return 0; BiTree p=bt,Q[]; //Q是佇列,元素是二叉樹節點的指標 int front = 0,rear = 1,leaf = 0 //front 和 rear 是隊頭和隊尾指標,leaf是葉子節點數 int last = 1,level = 1; //last是二叉樹同層最右節點的指標,level是二叉樹的層數 Q[1] = p; //根節點進佇列 while(front <= rear){ p = Q[++front]; if(level == k && !p->lchild && !p->child) leaf++; //葉子節點 if(p->lchild) Q[++rear] = p->lchild; //左孩子入隊 if(p->rchild) Q[++rear] = p->rchild; //右孩子入隊 if(front == last){ level++; //二叉樹同層最右節點已處理,層數增加一 last = rear; //last移動到下一層的最右一個元素 } if(level > k) return leaf; }//while }