编写一个过程采用非递归方法计算一个二叉树的所有结点个数java
时间: 2024-11-09 16:29:36 浏览: 13
编写一个将二叉树中每个结点的左右孩子交换的算法。
在Java中,计算一个非空二叉树的所有节点数可以使用迭代方法,通常会借助栈数据结构。以下是使用广度优先搜索(Breadth First Search, BFS)的一个示例实现:
首先,我们需要创建一个简单的二叉树节点类:
```java
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int val) {
this.val = val;
this.left = null;
this.right = null;
}
}
```
然后编写一个辅助方法来计算节点数:
```java
public int countNodes(TreeNode root) {
if (root == null) {
return 0;
}
Stack<TreeNode> stack = new Stack<>();
stack.push(root);
int count = 1; // 初始化根节点计数
while (!stack.isEmpty()) {
int levelSize = stack.size();
for (int i = 0; i < levelSize; i++) {
TreeNode node = stack.pop();
// 根据当前层大小更新总节点数
count += 1;
// 如果左孩子存在,压入栈继续遍历
if (node.left != null) {
stack.push(node.left);
}
// 如果右孩子存在,也压入栈
if (node.right != null) {
stack.push(node.right);
}
}
}
return count;
}
```
在这个过程中,我们从根节点开始,每次弹出一层的节点,并统计其数量。如果某个节点有左右孩子,我们会把它们推入栈中等待下一轮处理。
阅读全文