请用C++解决算法设计题:二叉树采用二叉链表存储结构,请分别用递归和非递归方法编写算法求二叉树的叶子结点的个数。
时间: 2024-10-24 18:10:13 浏览: 35
erchashubianli.rar_用二叉链表 进行 二叉树 遍历
在C++中,我们可以使用递归和迭代的方式来计算二叉树的叶子节点数。这里分别给出这两种方法的示例:
**递归方法**:
```cpp
class TreeNode {
public:
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
int countLeavesRec(TreeNode* root) {
if (!root) return 0; // 如果根为空,返回0
if (!root->left && !root->right) // 如果当前节点无左右孩子,则是叶子节点
return 1;
else
return countLeavesRec(root->left) + countLeavesRec(root->right); // 递归左子树和右子树
}
```
**非递归方法**(使用栈):
```cpp
int countLeavesIter(TreeNode* root) {
std::vector<TreeNode*> stack; // 使用栈来保存待访问的节点
int leafCount = 0;
if (root) stack.push_back(root);
while (!stack.empty()) {
TreeNode* node = stack.back();
stack.pop_back();
// 如果当前节点无左右孩子或者已经是叶子节点,计数加一
if (!node->left && !node->right)
leafCount++;
// 将当前节点的左右孩子入栈(如果存在)
if (node->left) stack.push_back(node->left);
if (node->right) stack.push_back(node->right);
}
return leafCount;
}
```
阅读全文