标签:des rip include 利用 malloc str create copy int
接受键盘输入的由大写英文字符和"#"字符构成的一个字符串(用于创建对应的二叉树)。
输出对应的二叉树叶结点的个数。
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: 统计利用先序遍历创建的二叉树叶结点的个数
标签:des rip include 利用 malloc str create copy int
原文地址:https://www.cnblogs.com/army613bts/p/12684490.html