用Python写一个二叉树的非递归遍历
时间: 2023-08-31 21:20:49 浏览: 114
### 回答1:
好的,下面是使用Python编写一个二叉树的非递归遍历的示例代码:
```python
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
class Solution:
def inorderTraversal(self, root: TreeNode) -> List[int]:
stack = []
result = []
node = root
while node or stack:
while node:
stack.append(node)
node = node.left
node = stack.pop()
result.append(node.val)
node = node.right
return result
```
上面的代码实现了一个二叉树的中序遍历。它使用了一个栈来记录遍历过程中的节点,以及一个结果列表来记录遍历结果。遍历过程中,我们先将根节点和所有左子节点入栈,然后逐个弹出栈顶节点,将其值加入结果列表,并将右子节点入栈。当栈为空时,遍历结束。我们可以将上面的代码稍作修改,来实现二叉树的前序遍历和后序遍历。
### 回答2:
二叉树的非递归遍历可以使用栈来实现。具体步骤如下:
1. 首先定义一个栈,用于存储待遍历的节点。
2. 将二叉树的根节点压入栈中。
3. 循环执行以下操作,直到栈为空:
a. 弹出栈顶节点,并打印该节点的值。
b. 如果该节点的右子节点不为空,则将右子节点压入栈中。
c. 如果该节点的左子节点不为空,则将左子节点压入栈中。
4. 遍历结束。
下面是用Python编写的代码示例:
```python
class Node:
def __init__(self, value):
self.value = value
self.left = None
self.right = None
def non_recursive_traversal(root):
if not root:
return
stack = []
current = root
while stack or current:
while current:
stack.append(current)
current = current.left
current = stack.pop()
print(current.value)
current = current.right
# 构建一个二叉树用于测试
root = Node(1)
root.left = Node(2)
root.right = Node(3)
root.left.left = Node(4)
root.left.right = Node(5)
root.right.left = Node(6)
root.right.right = Node(7)
print("非递归遍历结果:")
non_recursive_traversal(root)
```
以上代码中,首先定义了一个`Node`类用于表示二叉树的节点。然后通过`non_recursive_traversal`函数实现了二叉树的非递归遍历。最后通过构建一个二叉树,调用该函数进行遍历并打印结果。
### 回答3:
二叉树的非递归遍历可以使用栈数据结构来实现。下面是用Python写一个二叉树的先序遍历的非递归遍历的示例代码。
```python
# 定义二叉树节点类
class TreeNode:
def __init__(self, value):
self.val = value
self.left = None
self.right = None
# 定义二叉树非递归先序遍历函数
def preorderTraversal(root):
if not root:
return []
stack = []
result = []
node = root
while node or stack:
while node:
result.append(node.val) # 先访问当前节点的值
stack.append(node) # 入栈
node = node.left # 遍历左子树
node = stack.pop() # 出栈
node = node.right # 遍历右子树
return result
```
使用示例:
```python
# 创建二叉树
root = TreeNode(1)
root.left = TreeNode(2)
root.right = TreeNode(3)
root.left.left = TreeNode(4)
root.left.right = TreeNode(5)
# 调用非递归遍历函数
result = preorderTraversal(root)
print(result) # 输出:[1, 2, 4, 5, 3]
```
该示例代码实现了二叉树的非递归先序遍历。类似地,可以根据需要修改代码实现其他遍历方式,如中序遍历和后序遍历。
阅读全文