二叉树的创建,先中后序输出,计算叶子结点数目

Posted diandianer

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二叉树的创建,先中后序输出,计算叶子结点数目相关的知识,希望对你有一定的参考价值。

#include <stdio.h>
#include <iostream>
#include <algorithm>
using namespace std;
typedef struct BiTNode
{
    char data;
    struct BiTNode *l;
    struct BiTNode *r;
} BiTNode,*BiTree;
void CreatBiTree(BiTree &T)
{
    ///按先序次序输入二叉树中结点的值(一个字符),创建二叉链表表示的二叉树T;
    char ch;
    scanf("%c",&ch);
    if(ch==#)
        T=NULL;
    else
    {
        T=new BiTNode;
        T->data=ch;
        CreatBiTree(T->l);
        CreatBiTree(T->r);
    }
}
void PreOrderTraverse(BiTree T)///先序遍历二叉树
{
    if(T)
    {
        printf("%c",T->data);
        PreOrderTraverse(T->l);
        PreOrderTraverse(T->r);
    }
}

void MidOrderTraverse(BiTree T)///中序遍历二叉树
{
    if(T)
    {
        MidOrderTraverse(T->l);
        printf("%c",T->data);
        MidOrderTraverse(T->r);
    }
}
void AfOrderTraverse(BiTree T)///后序遍历二叉树
{
    if(T)
    {
        AfOrderTraverse(T->l);
        AfOrderTraverse(T->r);
        printf("%c",T->data);
    }
}
int Count(BiTree T){ //计算叶子结点的数目(利用递归)
    if(T== NULL){
        return 0;
    }
    else if ((T->l==NULL) && (T->r==NULL)){
        return 1;
    }
    else{
        return Count(T->l)+Count(T->r);
    }
}
int main()
{
    BiTree T;
    CreatBiTree(T);
    printf("先序遍历为
");
    PreOrderTraverse(T);
    printf("
");
    printf("中序遍历为
");
    MidOrderTraverse(T);
    printf("
");
    printf("后序遍历为
");
    AfOrderTraverse(T);
    printf("
");
    printf("输出叶子结点数:%d
",Count(T));
    return 0;
}

技术分享图片

 

(首先用#号填充,使二叉树的叶子结点全部为#)

输入:AB#CD##E##F#GH###

输出见下图:

技术分享图片

计算二叉树的所有叶子节点的数量:

当一个节点的左孩子和右孩子都为空时,它是叶子节点。

使用递归如果能找到就返回1,如果节点为NULL返回0,否则返回count(t->lchild)+ count(t->rchild)


以上是关于二叉树的创建,先中后序输出,计算叶子结点数目的主要内容,如果未能解决你的问题,请参考以下文章

二叉树的先中后序遍历-JS递归实现

二叉树的先中后序遍历-JS非递归实现

建立二叉树,层序、先序遍历

建立二叉树,层序、先序遍历

一个套路,写出来二叉树的迭代遍历

编程实现以上二叉树中序遍历操作,输出遍历序列,求写代码~~