Swust OJ975: 统计利用先序遍历创建的二叉树的度为2的结点个数

Posted Mikrokosmos

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Swust OJ975: 统计利用先序遍历创建的二叉树的度为2的结点个数相关的知识,希望对你有一定的参考价值。

题目简述

利用先序递归遍历算法创建二叉树计算该二叉树度为2结点的个数

输入

接受键盘输入的由大写英文字符和"#"字符构成的一个字符串(用于创建对应的二叉树)。

输出

输出该用例对应的二叉树度为2的结点个数。

样例输入复制

ABCD###EF##G##H##

样例输出复制

3
知识点:
二叉树每个结点至多只有两棵子树,即二叉树中不存在大于2的结点
故所求二叉树度为2的结点,即既有左孩子也要有右孩子
void DegreeTwo(Tree *&tree)
{
    if(tree!=NULL)
    {
        if(tree->lchild!=NULL&&tree->rchild!=NULL)
//左右孩子均存在,该结点为二叉树度为2的结点
            count++;
        if(tree->lchild!=NULL)
            DegreeTwo(tree->lchild);
//当不满足左右孩子均存在,单独判断左孩子是否有它的左右孩子
        if(tree->rchild!=NULL)
            DegreeTwo(tree->rchild);
//右孩子同上
    }
}

完整代码:

 

#include<iostream>
#include<malloc.h>
using namespace std;
int count=0;
typedef struct node
{
    char data;
    struct node *lchild,*rchild;
}Tree;
void CreateTree(Tree *&tree)
{
    char ch;
    cin>>ch;
    if(ch==#)
        tree=NULL;
    else
    {
        tree=(Tree*)malloc(sizeof(Tree));
        tree->data=ch;
        CreateTree(tree->lchild);
        CreateTree(tree->rchild);
    }
}
void DegreeTwo(Tree *&tree)
{
    if(tree!=NULL)
    {
        if(tree->lchild!=NULL&&tree->rchild!=NULL)
            count++;
        if(tree->lchild!=NULL)
            DegreeTwo(tree->lchild);
        if(tree->rchild!=NULL)
            DegreeTwo(tree->rchild);
    }
}
int main()
{
    Tree *tree;
    CreateTree(tree);
    DegreeTwo(tree);
    cout<<count;
    return 0; 
}

 

 

 

 

 

以上是关于Swust OJ975: 统计利用先序遍历创建的二叉树的度为2的结点个数的主要内容,如果未能解决你的问题,请参考以下文章

建立二叉树的二叉链表表示,实现二叉树的先序、中序、后序和按层次遍历,统计并输出结点个数。

二叉树oj ---->先序 or 前序遍历(非递归实现)

几道简单的二叉树OJ题

二叉树oj ---->中序遍历(非递归)

SWUST OJ(960)

SWUST OJ(1044)