用非递归算法实现求二叉树的结点个数
时间: 2023-05-26 12:03:58 浏览: 113
非递归实现二叉树的算法
算法思路:
1. 初始化计数器count为0,定义一个栈并将根结点压入栈中。
2. 当栈不为空时,取出栈顶元素作为当前处理结点,将其弹出栈。
3. 将当前结点的计数器加1。
4. 如果当前结点存在右子树,将其压入栈中;如果存在左子树,也将其压入栈中。
5. 重复步骤2-4,直到栈为空。
6. 返回计数器count的值,即为二叉树的结点个数。
代码实现:
```python
def count_nodes(root):
if not root:
return 0
stack = [root] # 根结点入栈
count = 0 # 计数器初始化为0
while stack:
node = stack.pop() # 取出栈顶元素
count += 1 # 计数器加1
if node.right: # 如果存在右子树,将其入栈
stack.append(node.right)
if node.left: # 如果存在左子树,将其入栈
stack.append(node.left)
return count
```
时间复杂度:O(n),n为二叉树的结点个数,需要遍历所有结点。
空间复杂度:O(h),h为二叉树的高度,需要使用栈来存储未访问的结点。最坏情况下,二叉树为一条链,则栈的最大长度为h。
阅读全文