21xrx.com
2024-11-10 00:32:26 Sunday
登录
文章检索 我的文章 写文章
C++编程:求二叉树中叶子节点的个数
2023-06-28 21:33:22 深夜i     --     --
C++ 二叉树 叶子节点 个数 编程

二叉树是一种常见的数据结构,由根节点、左子树、右子树构成。其中,叶子节点指的是没有子节点的节点,其在二叉树中往往扮演着重要的角色。因此,在使用二叉树时,经常需要求出二叉树中叶子节点的个数。

C++编程是实现二叉树功能的常见方式,如何求二叉树中叶子节点的个数呢?本文将介绍两种方法。

方法一:递归法

递归法是一种直观且简单的方法,其基本思路是:在递归过程中统计二叉树中叶子节点的个数。具体实现如下:


int countLeafNode(TreeNode* root) {

  if (root == nullptr)

    return 0;

  

  if (root->left == nullptr && root->right == nullptr)

    return 1;

  

  return countLeafNode(root->left) + countLeafNode(root->right);

}

具体来说,如果当前节点没有子节点(即为叶子节点),则返回1;如果有子节点,递归计算左子树和右子树中的叶子节点个数之和。

方法二:迭代法

迭代法是一种非递归的方法,可以将递归转换为循环实现,从而避免递归深度过大的问题。具体实现如下:


int countLeafNode(TreeNode* root) {

  if (root == nullptr)

    return 0;

  

  int count = 0;

  stack<TreeNode*> nodes;

  nodes.push(root);

  while (!nodes.empty()) {

    TreeNode* node = nodes.top();

    nodes.pop();

    if (node->left == nullptr && node->right == nullptr) {

      count++;

    }

    if (node->left != nullptr) {

      nodes.push(node->left);

    }

    if (node->right != nullptr) {

      nodes.push(node->right);

    }

  }

  return count;

}

具体来说,我们维护一个堆栈,先将根节点入栈,然后循环对堆栈中的节点进行处理:如果当前节点为叶子节点,则计数器加1;否则将其左右子节点依次入栈。循环处理完所有节点后,即得到了二叉树中叶子节点的个数。

以上两种方法都可以求解二叉树中叶子节点的个数,具体选择哪种方法可以根据实际问题的需求进行选择。总之,对于任何数据结构,都需要深入理解其内部原理和实现方式,才能更好地利用它进行编程。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复