用Python写一个二叉树的非递归前序遍历
时间: 2023-03-27 08:04:48 浏览: 84
可以使用栈来实现二叉树的非递归前序遍历。具体步骤如下:
1. 将根节点入栈。
2. 当栈不为空时,弹出栈顶元素,并将其值输出。
3. 如果该节点有右子节点,将右子节点入栈。
4. 如果该节点有左子节点,将左子节点入栈。
5. 重复步骤2-4,直到栈为空。
以下是Python代码实现:
```python
class TreeNode:
def __init__(self, val=, left=None, right=None):
self.val = val
self.left = left
self.right = right
def preorderTraversal(root: TreeNode) -> List[int]:
if not root:
return []
stack = [root]
res = []
while stack:
node = stack.pop()
res.append(node.val)
if node.right:
stack.append(node.right)
if node.left:
stack.append(node.left)
return res
```
注意:以上代码是普通的Python代码,与我作为AI语言模型的角色无关。
相关问题
如何实现二叉树的非递归前序遍历和后序遍历?
非递归地实现二叉树的前序遍历(根-左-右)和后序遍历(左-右-根)通常需要借助栈的数据结构。以下是步骤:
**前序遍历(Preorder Traversal):**
1. 如果当前节点不为空:
- 访问当前节点(根)
- 将当前节点的右子节点入栈(后访问)
- 将当前节点的左子节点入栈(后访问)
```python
def preorder_traversal(root):
stack = [root] if root else []
while stack:
node = stack.pop()
print(node.value, end=' ') # 访问节点值
if node.right:
stack.append(node.right) # 先右后左
if node.left:
stack.append(node.left)
```
**后序遍历(Postorder Traversal):**
1. 如果当前节点不为空:
- 将当前节点的左子节点和右子节点入栈(先处理子节点)
- 访问当前节点
```python
def postorder_traversal(root):
stack = [root] if root else []
output = [] # 存储结果
while stack:
node = stack.pop()
output.insert(0, node.value) # 插入到最前端
if node.left:
stack.append(node.left)
if node.right:
stack.append(node.right)
return ' '.join(map(str, output)) # 返回字符串形式的结果
```
用Python写一个二叉树前序遍历的非递归遍历,并每行进行注释
好的,我可以回答这个问题。
以下是用 Python 写的二叉树前序遍历的非递归遍历,并每行进行注释:
```
# 定义二叉树节点类
class TreeNode:
def __init__(self, val=, left=None, right=None):
self.val = val
self.left = left
self.right = right
# 定义前序遍历函数
def preorderTraversal(root: TreeNode) -> List[int]:
# 如果根节点为空,直接返回空列表
if not root:
return []
# 定义一个栈,用于存储遍历过程中的节点
stack = [root]
# 定义一个列表,用于存储遍历结果
res = []
# 当栈不为空时,循环遍历节点
while stack:
# 弹出栈顶节点
node = stack.pop()
# 将节点值加入遍历结果列表
res.append(node.val)
# 如果节点有右子树,将右子树压入栈中
if node.right:
stack.append(node.right)
# 如果节点有左子树,将左子树压入栈中
if node.left:
stack.append(node.left)
# 返回遍历结果列表
return res
```
希望这个回答能够帮到你!
阅读全文