求二叉树叶子结点数

#include<stdio.h>
#include<stdlib.h>
typedef struct TNode{//二叉树结构
  char data;//结点的值
  TNode *lchild;//左子树
  TNode *rchild;//右子树
}*BiTree;
void CreateBiTree(BiTree &T)//中序遍历方式创建二叉树 ,输入#代表该结点为空
{
  char ch;
  ch=getchar();
  if(ch=='#')
    T=NULL;
  else//结点非空
  {
    T=new TNode;
    T->data =ch;
    CreateBiTree(T->lchild );
    CreateBiTree(T->rchild );
  }
}
int CountLeaf(BiTree T)
{
  static int LeafNum=0;//叶子初始数目为0,使用静态变量
  if(T)
  {
    if((!T->lchild) &&(!T->rchild))//为叶子结点
      LeafNum++;//叶子数目加1
    else //不为叶子结点
    {
      CountLeaf(T->lchild );//递归统计左子树叶子数目
      CountLeaf(T->rchild );//递归统计右子树叶子数目
    }
  }
  return LeafNum;
}
int main()
{
  BiTree T;
  int leafNum;
  printf("请输入中序遍历的二叉树序列(#号代表该结点为空):如(ABC##DE#G##F###)\n");
  CreateBiTree(T);
  leafNum=CountLeaf(T);
  printf("该二叉树的叶子结点数是:%d\n",leafNum);
  return 0;
}
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我会尽力回答你的问题。这是一个关于二叉树的问题,需要根据先序扩展序列构建二叉树,并出二叉树的结点数叶子结点数和高度。下面是 C 语言的代码实现,供你参考: ```c #include <stdio.h> #include <stdlib.h> // 定义二叉树结构体 typedef struct TreeNode { char val; // 结点值 struct TreeNode* left; // 左子结点 struct TreeNode* right; // 右子结点 } TreeNode; // 根据先序扩展序列构建二叉树的函数 TreeNode* buildTree(char* s, int* i) { if (s[*i] == '#' || s[*i] == '\0') { // 空结点返回 NULL (*i)++; return NULL; } TreeNode* node = (TreeNode*) malloc(sizeof(TreeNode)); // 创建结点 node->val = s[(*i)++]; node->left = buildTree(s, i); // 递归构建左子树 node->right = buildTree(s, i); // 递归构建右子树 return node; } // 叉树点数的函数 int countNodes(TreeNode* root) { if (root == NULL) { return 0; } return 1 + countNodes(root->left) + countNodes(root->right); } // 叉树叶子结点数的函数 int countLeaves(TreeNode* root) { if (root == NULL) { return 0; } if (root->left == NULL && root->right == NULL) { // 判断是否为叶子结点 return 1; } return countLeaves(root->left) + countLeaves(root->right); } // 叉树高度的函数 int getHeight(TreeNode* root) { if (root == NULL) { return 0; } int leftHeight = getHeight(root->left); // 左子树高度 int rightHeight = getHeight(root->right); // 右子树高度 return 1 + (leftHeight > rightHeight ? leftHeight : rightHeight); } // 主函数 int main() { char s[100]; printf("请输入先序扩展序列:\n"); scanf("%s", s); int i = 0; TreeNode* root = buildTree(s, &i); // 构建二叉树 int nodes = countNodes(root); // 点数 int leaves = countLeaves(root); // 叶子结点数 int height = getHeight(root); // 叉树高度 printf("结点数:%d\n", nodes); printf("叶子结点数:%d\n", leaves); printf("二叉树高度:%d\n", height); return 0; } ``` 输入先序扩展序列后,程序会自动构建二叉树,并输出二叉树的结点数叶子结点数和高度。注意,输入的字符串长度不能超过 100。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值