二叉树的叶子结点:没有子树的结点叫叶子结点。
C++代码:
#define _CRT_SECURE_NO_WARNINNGS
#include<iostream>
using namespace std;
//二叉树结点
typedef struct BINARYTREENODE {
char root;
struct BINARYTREENODE *lchild;
struct BINARYTREENODE *rchild;
}BinaryTreeNode;
//创建二叉树
BinaryTreeNode* CreateBinaryTree() {
char ch;
cin >> ch;
BinaryTreeNode *node;
if (ch == '#') {
node = NULL;
}
else {
node = (BinaryTreeNode*)malloc(sizeof(BinaryTreeNode));
if (ch) {
node->root = ch;
node->lchild = CreateBinaryTree();
node->rchild = CreateBinaryTree();
}
}
return node;
}
//二叉树叶子结点个数
int BinaryTreeLeavesCount(BinaryTreeNode* root, int *count) {
if (root != NULL && root->lchild == NULL && root->rchild == NULL) {
(*count)++;
}
if (root!=NULL) {
BinaryTreeLeavesCount(root->lchild, count);
BinaryTreeLeavesCount(root->rchild, count);
}
return *count;
}
//销毁二叉树
void FreeBinaryTree(BinaryTreeNode *root) {
if (root != NULL) {
if (root->lchild != NULL) {
FreeBinaryTree(root->lchild);
}
if (root->rchild != NULL) {
FreeBinaryTree(root->rchild);
}
free(root);
root = NULL;
}
}
int main() {
//创建二叉树
BinaryTreeNode *root = CreateBinaryTree();
//二叉树叶子结点个数
int count = 0;
cout << "BinaryTreeLeavesCount:" << BinaryTreeLeavesCount(root, &count) << endl;
//销毁二叉树
FreeBinaryTree(root);
return 0;
}
C++运行结果: