C++非递归求二叉树叶子节点个数
时间: 2024-01-23 14:41:02 浏览: 103
可以使用迭代法(非递归)来遍历二叉树,然后统计叶子节点的个数。下面是一个示例代码:
```C++
#include <iostream>
#include <stack>
using namespace std;
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
int countLeaves(TreeNode* root) {
if (!root) return 0;
stack<TreeNode*> s;
s.push(root);
int count = 0;
while (!s.empty()) {
TreeNode* node = s.top();
s.pop();
if (!node->left && !node->right) count++; // 如果是叶子节点,计数器加1
if (node->right) s.push(node->right); // 先将右子节点入栈
if (node->left) s.push(node->left); // 再将左子节点入栈
}
return count;
}
int main() {
TreeNode* root = new TreeNode(1);
root->left = new TreeNode(2);
root->right = new TreeNode(3);
root->left->left = new TreeNode(4);
root->left->right = new TreeNode(5);
root->right->left = new TreeNode(6);
root->right->right = new TreeNode(7);
cout << countLeaves(root) << endl; // 输出叶子节点个数
return 0;
}
```
该算法的时间复杂度为O(n),空间复杂度为O(h),其中n是二叉树的节点个数,h是二叉树的高度。
阅读全文