为了做好数据结构期末的编程题,写个博客再熟悉熟悉。
-
求二叉树的节点
-
所用二叉树
- 求节点个数
//求节点个数 int F1(BiTree T ) { //首先写递归的归 if (T == NULL) return 0; return F1(T->lchild) + F1(T->rchild) + 1; }
-
求叶子节点个数
//求叶子节点个数 int F2(BiTree T) { if (T == NULL)//空树的情况 return 0; else if (T->lchild == NULL && T->rchild == NULL) //如果为叶子 return 1; //存在子树 else return F2(T->lchild) + F2(T->rchild); }
- 求度为1的节点个数
//求度为1的节点个数 int F3(BiTree T) { int n1, n2; if (T == NULL||(T->lchild==NULL)&&(T->rchild==NULL))//空树或者递归到了叶子 return 0; n1 = F3(T->lchild); n2 = F3(T->rchild); if ((T->lchild != NULL) && (T->rchild != NULL)) return n1 + n2; //除去空树,叶子节点,度为2的节点便是度为1 return n1 + n2 + 1; }
- 求度为2的节点个数
int F4(BiTree T) { int n1, n2; if (T == NULL || ((T->lchild == NULL) && (T->rchild == NULL)))//空树或者递归到了叶子 return 0; n1 = F4(T->lchild); n2 = F4(T->rchild); if ((T->lchild != NULL) && (T->rchild != NULL)) return n1 + n2 + 1;//计数 return n1 + n2; }
- 求第K层节点个数(递归)
int F5(BiTree T,int k) { //这里的递归终点其实是k减为0或者k>0时,为空树 if (k < 1 || T == NULL) return 0; if (k == 1)//k=1时就到了第K层 return 1; int n1 = F5(T->lchild, k - 1);//向下递归 int n2 = F5(T->rchild, k - 1); return n1 + n2; }