求二叉树的叶子结点数

 

只要将先序遍历二叉树算法中vist()函数简单地进行修改就可以。

#define  MAX_NODE  50

int  search_leaves( BTNode  *T)

         BTNode  *Stack[MAX_NODE] ,*p=T;

         int  top=0, num=0;

         if  (T!=NULL)

         { 

                   stack[++top]=p ;

                   while (top>0)

                { 

                            p=stack[top--] ;

                     if (p->Lchild==NULL&&p->Rchild==NULL)  num++ ;  

                    if  (p->Rchild!=NULL )

                        stack[++top]=p->Rchild;

                    if  (p->Lchild!=NULL )

                     stack[++top]=p->Lchild;

              }

         }

         return(num) ;

}

 

  • 0
    点赞
  • 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、付费专栏及课程。

余额充值