问题 D: 简单二叉树遍历
时间: 2023-08-08 14:07:25 浏览: 75
好的,那我就先介绍一下前序遍历吧。
前序遍历是指先访问根节点,然后再依次访问左子树和右子树。其遍历顺序为:根节点 -> 左子树 -> 右子树。
在实现前序遍历时,可以使用递归或栈来实现。递归方式比较简单,代码如下:
```python
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
def preorderTraversal(root: TreeNode) -> List[int]:
if not root:
return []
res = []
res.append(root.val)
res += preorderTraversal(root.left)
res += preorderTraversal(root.right)
return res
```
在这个代码中,我们首先判断当前节点是否为空,如果为空则直接返回空列表。否则,我们先将当前节点的值加入到结果列表中,然后再递归地遍历左子树和右子树,并将其结果合并到结果列表中。
另外,使用栈的方式也可以实现前序遍历。代码如下:
```python
def preorderTraversal(root: TreeNode) -> List[int]:
if not root:
return []
res = []
stack = [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
```
在这个代码中,我们首先判断当前节点是否为空,如果为空则直接返回空列表。否则,我们使用一个栈来保存节点,首先将根节点入栈。然后每次从栈中取出一个节点,将其值加入结果列表中。如果该节点有右子树,则将其右子节点入栈;如果该节点有左子树,则将其左子节点入栈。注意,由于栈的特性,我们要先将右子节点入栈,再将左子节点入栈,这样才能保证左子节点先被访问。
阅读全文