Swust OJ973: 统计利用先序遍历创建的二叉树叶结点的个数

Posted Mikrokosmos

tags:

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

题目简述

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

输入

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

输出

输出对应的二叉树叶结点的个数。

样例输入复制

ABCD###EF##G###
A##B##
#A

样例输出复制

3
Step One:先序递归遍历算法创建二叉树
void CreateTree(BiTree *&tree)
 {
     char ch;
     cin>>ch;
     if(ch==#)
         tree=NULL;
     else
     {
         tree=(BiTree*)malloc(sizeof(BiTree));
         tree->data=ch;
         CreateTree(tree->lchild);
         CreateTree(tree->rchild);
         
     }
 }

Step Two:二叉树的叶结点

叶子结点 :度为0的结点, 即没有子结点的结点.

即当某结点既没有左孩子也没有右孩子时,可知该结点为二叉树的叶结点

 

void LeafCount(BiTree *&tree)
{
    if(tree!=NULL)
    {
        if(tree->lchild==NULL&&tree->rchild==NULL)
//左右孩子结点为空时,该结点为叶子结点
            count++;
        if(tree->lchild!=NULL)
            LeafCount(tree->lchild);
//当左孩子结点不为空时,继续调用递归函数判断左孩子结点是否为叶子结点
        if(tree->rchild!=NULL)
            LeafCount(tree->rchild);
    }
}

 

 

 

完整代码:

 

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

 

 

 

 

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

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

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

几道简单的二叉树OJ题

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

SWUST OJ(960)

SWUST OJ(1044)