解法3层次遍历是从第一层开始,访问一层的全部结点后(此时该层的全部结点已出队)再访问下一层的结点。上一层遍历完毕,队中恰好是下一层的全部结点。若k<1,返回0;否则将根结点进队,当前层次curl=1。队不空循环:(1)若curl=k,队中恰好包含该层的全部结点,直接返回队中元素个数(即第k层结点个数)。(2)否则,求出队中元素个数n(当前层curl的全部结点个数),循环出队n次,每次出队一个结点时将其孩子结点进队。(3)置curl++,进入下一层处理。最后返回0(>二叉树高度的情况)。11/31
解法3 层次遍历是从第一层开始,访问一层的全部结点后(此时该层的全部结 点已出队)再访问下一层的结点。上一层遍历完毕,队中恰好是下一层的全 部结点。若k<1,返回0;否则将根结点进队,当前层次curl=1。队不空循环: (1)若curl=k,队中恰好包含该层的全部结点,直接返回队中元素个数 (即第k层结点个数)。 (2)否则,求出队中元素个数n(当前层curl的全部结点个数),循环 出队n次,每次出队一个结点时将其孩子结点进队。 (3)置curl++,进入下一层处理。 最后返回0(k>二叉树高度的情况)。 11/31
1/解法3public static int KCount4(BTreeclass bt,int k)/ / k<1返回0fif (k<i)return0;1 /定义队列quQueue<BTNode>qu=newLinkedList<BTNode>();BTNode<Character>p,q=null;1/当前层次,从1开始int curl=l;1/根结点进队qu.offer(bt.b);//队不空循环while(!qu.isEmpty()){ if (curl==k)//当前层为第k层,返回队中元素个数return qu.size();//求出当前层结点个数int n=qu.size():1/出队当前层的n个结点for (int i=1;i<=n;i++)出队一个结点(p=qu.poll();if (p.lchild!=null)1/有左孩子时将其进队qu.offer(p.lchild);//有右孩子时将其进队if (p.rchild!=null)qu.offer(p.rchild);1转向下一层curl++;return ;12/31
public static int KCount4(BTreeClass bt,int k) //解法3 { if (k<1) return 0; //k<1返回0 Queue<BTNode> qu=new LinkedList<BTNode>(); //定义队列qu BTNode<Character> p,q=null; int curl=1; //当前层次,从1开始 qu.offer(bt.b); //根结点进队 while (!qu.isEmpty()) //队不空循环 { if (curl==k) //当前层为第k层,返回队中元素个数 return qu.size(); int n=qu.size(); //求出当前层结点个数 for (int i=1;i<=n;i++) //出队当前层的n个结点 { p=qu.poll(); //出队一个结点 if (p.lchild!=null) //有左孩子时将其进队 qu.offer(p.lchild); if (p.rchild!=null) //有右孩子时将其进队 qu.offer(p.rchild); } curl++; //转向下一层 } return 0; } 12/31