要求写出非递归的方法实现对给定二叉树的先序和层序遍历算法。
时间: 2024-05-30 16:15:36 浏览: 99
先序遍历的非递归实现:
1. 创建一个栈,将根节点入栈。
2. 当栈不为空时,弹出栈顶节点,并输出该节点的值。
3. 如果该节点有右子节点,将右子节点入栈。
4. 如果该节点有左子节点,将左子节点入栈。
5. 重复步骤2-4,直到栈为空。
层序遍历的非递归实现:
1. 创建一个队列,将根节点入队。
2. 当队列不为空时,弹出队首节点,并输出该节点的值。
3. 如果该节点有左子节点,将左子节点入队。
4. 如果该节点有右子节点,将右子节点入队。
5. 重复步骤2-4,直到队列为空。
相关问题
要求写出非递归的方法实现对给定二叉树的先序和层序遍历算法
好的,下面是非递归实现二叉树先序遍历和层序遍历的方法:
先序遍历:
```python
def preorder_traversal(root):
if not root:
return []
stack, res = [root], []
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
def level_order_traversal(root):
if not root:
return []
queue, res = [root], []
while queue:
level = []
for i in range(len(queue)):
node = queue.pop(0)
level.append(node.val)
if node.left:
queue.append(node.left)
if node.right:
queue.append(node.right)
res.append(level)
return res
```
以上两个算法都是使用非递归的方式实现的,通过使用栈和队列来模拟递归过程,从而达到遍历二叉树的目的。
写出非递归的方法实现对给定二叉树的先序和层序遍历算法。
非递归的先序遍历:
1. 初始化一个栈,将根节点压入栈中。
2. 当栈不为空时,弹出栈顶元素,并访问该节点。
3. 如果该节点有右子节点,则将右子节点压入栈中。
4. 如果该节点有左子节点,则将左子节点压入栈中。
5. 重复步骤2-4,直到栈为空。
非递归的层序遍历:
1. 初始化一个队列,将根节点入队。
2. 当队列不为空时,取出队列头元素,并访问该节点。
3. 如果该节点有左子节点,则将左子节点入队。
4. 如果该节点有右子节点,则将右子节点入队。
5. 重复步骤2-4,直到队列为空。
阅读全文