//1.【基础题】--求二叉树叶子节点的个数/求二叉树第k层的节点个数。
#include<iostream>
#include<cassert>
using namespace std;
template<typename T>
struct TreeNode
{
T data;
TreeNode<T>* left;
TreeNode<T>* right;
TreeNode(const T& x)
:data(x)
,left(NULL)
,right(NULL)
{}
};
template<typename T>
class BinaryTree
{
typedef TreeNode<T> Node;
public:
BinaryTree(const T* arr,const T& invalib,int sz)//arr为存放数的元素值得数组,invalib 为非法值,sz为数组的元素个数
{
assert(arr);
int index=0;
_root=CreatTree(arr,invalib,sz,index);
}
int GetLeafNodeNumber()//求二叉树叶子节点的个数
{
return _GetLeafNodeNumber(_root);
}
int Get_K_NodeNumber(int k)//求二叉树第k层的结点数
{
return _Get_K_NodeNumber(_root,k);
}
protected:
----------
Node* CreatTree(const T* arr,const T& invalib,int sz,int& index)//前序遍历二叉树
{
assert(arr);
Node* root=NULL;
while (index<sz&&arr[index]!=invalib)
{
root=new Node(arr[index]);
root->left=CreatTree(arr,invalib,sz,++index);
root->right=CreatTree(arr,invalib,sz,++index);
}
return root;
}
----------
----------
int _GetLeafNodeNumber(Node* root)//求二叉树的叶子节点
{
//1.树为空,二叉树节点个数为0
if (root==NULL)
{
return 0;
}
//2.树不为空,且树只有一个结点,二叉树的节点个数为1
if (root->left==NULL&&root->right==NULL)
{
return 1;
}
//3.树不为空,且树的节点个数大于1;则树的结点个数=当前左子树的节点个数+当前右子树的节点个数
return _GetLeafNodeNumber(root->left)+_GetLeafNodeNumber(root->right);
}
----------
----------
int _Get_K_NodeNumber(Node* root ,int k)//求二叉树第K层的结点个数
{
//1.首先断言层数K>0
assert(k>0);
//2.树为空,二叉树每层的节点个数都为0
if (root==NULL)
{
return 0;
}
//3.树不为空,层数为1,第一层的节点个数为1;
if (k==1)
{
return 1;
}
//4.树不为空,层数大于1,则第k层的节点个数=当前跟结点的左子树的k-1层的节点个数+当前跟结点的右子树的k-1层的结点个数;
return _Get_K_NodeNumber(root->left,k-1)+_Get_K_NodeNumber(root->right,k-1);
}
----------
protected:
Node* _root;
};
int main()
{
int arr[]={1,2,3,'#','#',4,'#','#',5,6,'#','#','#'};
int sz=sizeof(arr)/sizeof(arr[0]);
BinaryTree<int> bt(arr,'#',sz);
cout<<"叶子节点个数:"<<bt.GetLeafNodeNumber()<<endl;//3
cout<<"第一层节点数:"<<bt.Get_K_NodeNumber(1)<<endl;//1
cout<<"第二层节点数:"<<bt.Get_K_NodeNumber(2)<<endl;//2
cout<<"第三层节点数:"<<bt.Get_K_NodeNumber(3)<<endl;//3
return 0;
}
求二叉树叶子节点的个数/求二叉树第k层的节点个数(递归思想)
最新推荐文章于 2023-11-08 08:10:36 发布