# 给定一个二叉树,返回它的 前序 遍历。
#
# 示例:
#
# 输入: [1,null,2,3]
# 1
# \
# 2
# /
# 3
#
# 输出: [1,2,3]
#
#
# 进阶: 递归算法很简单,你可以通过迭代算法完成吗?
# Related Topics 栈 树
# 👍 372 👎 0
# 144.二叉树的前序遍历
# leetcode submit region begin(Prohibit modification and deletion)
# Definition for a binary tree node.
from typing import List
from collections import deque
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
class Solution:
'''
# 递归写法
def preorderTraversal(self, root: TreeNode) -> List[int]:
if not root:
return []
return self.recur(root, [])
def recur(self, root, ans):
if not root:
return
ans.append(root.val)
self.recur(root.left, ans)
# 把 ans 的引用传给 子递归遍历
self.recur(root.right, ans)
return ans
'''
# 非递归写法,因为栈的先进后出,前序遍历需要根、左、右。所以先输出左面,左面后入栈
def preorderTraversal(self, root: TreeNode) -> List[int]:
ans = []
if not root:
return ans
tmp_stack = deque([root])
while tmp_stack:
cur = tmp_stack.pop()
ans.append(cur.val)
if cur.right:
tmp_stack.append(cur.right)
if cur.left:
tmp_stack.append(cur.left)
return ans
# leetcode submit region end(Prohibit modification and deletion)
if __name__ == '__main__':
a, b, c, d, e = TreeNode(0), TreeNode(1), TreeNode(2), TreeNode(3), TreeNode(4)
a.left = b
b.left = c
b.right = d
a.right = e
sol = Solution()
# print(sol.preorderTraversal(a))
print(sol.preorderTraversal([]))
Python刷leetcode--144.二叉树的前序遍历
最新推荐文章于 2023-08-02 16:56:43 发布