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