给定一个二叉树,返回它的 前序 遍历。
示例:
输入: [1,null,2,3]
1
2
/
3
输出: [1,2,3]
方法1:
递归
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def _preorderTraversal(self,res,root):
if not root:
return
res.append(root.val)
self._preorderTraversal(res,root.left)
self._preorderTraversal(res,root.right)
def preorderTraversal(self, root):
"""
:type root: TreeNode
:rtype: List[int]
"""
res=[]
self._preorderTraversal(res,root)
return res
方法二:
堆栈
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def preorderTraversal(self, root):
"""
:type root: TreeNode
:rtype: List[int]
"""
if not root:
return []
myStack = []
res = []
node = root
while node or myStack:
while node: #从根节点开始,一直找它的左子树
myStack.append(node)
res.append(node.val)
node = node.left
node = myStack.pop() #while结束表示当前结点node为空,即前一个结点没有左子树了
node = node.right
return res