请用c++的非递归方法实现求二叉树的叶结点个数
时间: 2023-12-06 14:39:35 浏览: 79
以下是使用C++的非递归方法实现求二叉树的叶节点个数的代码:
```cpp
#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 countLeafNodes(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++;
}
if (node->left) {
s.push(node->left);
}
if (node->right) {
s.push(node->right);
}
}
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);
cout << countLeafNodes(root) << endl; // Output: 3
return 0;
}
```
这里使用了栈来实现非递归遍历二叉树,对于每个节点,如果它没有左子树和右子树,那么它就是叶节点,计数器加1。然后将它的左子节点和右子节点(如果存在)压入栈中,继续遍历。最后返回计数器的值即可。
阅读全文