先序遍历二叉树。利用栈实现非递归算法
时间: 2023-10-26 17:11:54 浏览: 90
先序遍历二叉树的顺序是:根节点 -> 左子树 -> 右子树。非递归算法需要借助栈来保存遍历过程中的节点信息,具体实现步骤如下:
1. 定义一个栈,将根节点入栈。
2. 循环执行以下操作,直到栈为空:
a. 弹出栈顶节点,并输出该节点的值。
b. 如果该节点存在右子树,则将右子树压入栈。
c. 如果该节点存在左子树,则将左子树压入栈。
以下是代码实现:
```python
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
def preorder_traversal(root: TreeNode):
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
```
时间复杂度为 $O(n)$,空间复杂度为 $O(n)$。其中,$n$ 为二叉树的节点个数。
阅读全文