解释二叉树中序遍历的非递归程序
时间: 2023-06-25 10:07:13 浏览: 96
二叉树中序遍历的非递归程序可以使用栈来实现。具体步骤如下:
1. 首先将根节点入栈,并将其左子树全部入栈,直到左子树为空。
2. 当栈不为空时,弹出栈顶元素并输出,然后将其右子树入栈,如果右子树存在,重复步骤 1。
3. 当栈为空且右子树也为空时,则遍历结束。
下面是一个用 Python 实现的例子:
```python
class Node:
def __init__(self, val=None, left=None, right=None):
self.val = val
self.left = left
self.right = right
def inorder_traversal(root):
stack = []
curr = root
while stack or curr:
if curr:
stack.append(curr)
curr = curr.left
else:
curr = stack.pop()
print(curr.val)
curr = curr.right
```
在这个例子中,我们定义了一个 `Node` 类来表示二叉树的节点,其中包含了节点的值、左子树和右子树。接着,我们定义了一个名为 `inorder_traversal` 的函数来实现中序遍历,其中 `root` 参数是二叉树的根节点。函数中创建了一个栈 `stack` 和一个指针 `curr`,初始时 `curr` 指向根节点。接下来,我们使用 `while` 循环来模拟遍历过程。如果 `curr` 不为空,就将其入栈并将指针移动到其左子节点;否则,弹出栈顶元素并输出其值,并将指针移动到其右子节点。最后,当栈为空且右子树也为空时,遍历结束。
阅读全文