#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
typedef struct node{
char data ;
struct node * lchild;
struct node * rchild;
}BiTree;
BiTree * CreatTree();
int Count(BiTree * );
void Preorder(BiTree *);
int main(){
BiTree * top = NULL;
top = CreatTree();
printf("遍历结果: ");
Preorder(top);
putchar('\n');
printf("叶子节点的个数: %d\n",Count(top));
system("pause");
return 0;
}
BiTree * CreatTree(){
BiTree *t;
char ch ;
ch = getchar();
if (ch != '#'){
t = (BiTree *)malloc(sizeof(BiTree));
t ->data = ch ;
t->lchild = CreatTree();
t->rchild = CreatTree();
}
else{
t=NULL;
}
return t;
}
int Count(BiTree * top){
if(top == NULL){
return 0;
}
else if ((top->lchild==NULL) && (top->rchild==NULL)){
return 1;
}
else{
return Count(top->lchild)+Count(top->rchild);
}
}
void Preorder(BiTree * top ){
if(top != NULL){
printf("%c ",top->data);
Preorder(top->lchild);
Preorder(top->rchild);
}
}
相关文章
- 文本左右对齐(字符串、模拟)、螺旋矩阵 II(数组、矩阵)、二叉树中的最大路径和(树、深度优先搜索)
- Java实现二叉树的深度优先遍历和广度优先遍历算法示例
- C语言实现二叉树的基本操作---创建、遍历、求深度、求叶子结点
- 跪求C语言实现二叉树的深度和根
- 求满二叉树(哈夫曼树)叶子节点和非叶子节点的数目
- Java语言描述二叉树的深度和宽度
- 基于C++类和指针实现二叉树1、二叉树的定义 二叉树(Binary Tree)是一种特殊的树型结构,每个节点至多有两棵子树,且二叉树的子树有左右之分,次序不能颠倒。 由定义可知,二叉树中不存在度(结点拥有的子树数目)大于2的节点。二叉树形状如下下图所示:2、二叉树的性质(1)在二叉树中的第i层上至多有2^(i-1)个结点(i>=1)。备注:^表示此方(2)深度为k的二叉树至多有2^k-1个节点(k>=1)。(3)对任何一棵二叉树T,如果其终端结点数目为n0,度为2的节点数目为n2,则n0=n2+1。满二叉树:深度为k且具有2^k-1个结点的二叉树。即满二叉树中的每一层上的结点数都是最大的结点数。完全二叉树:深度为k具有n个结点的二叉树,当且仅当每一个结点与深度为k的满二叉树中的编号从1至n的结点一一对应。可以得到一般结论:满二叉树和完全二叉树是两种特殊形态的二叉树,满二叉树肯定是完全二叉树,但完全二叉树不不一定是满二叉树。举例如下图是所示:(4)具有n个节点的完全二叉树的深度为log2n+ 1
- C++基于递归和非递归算法求二叉树镜像的方法
- C++使用递归和非递归算法实现的二叉树叶子节点个数计算方法
- C++实现LeetCode(124.求二叉树的最大路径和)