【题目】
给你二叉树的根节点 root ,返回它节点值的 前序 遍历。
【示例 1】
输入:root = [1,null,2,3]
输出:[1,2,3]
【示例 2】
输入:root = []
输出:[]
【示例 3】
输入:root = [1]
输出:[1]
【示例 4】
输入:root = [1,2]
输出:[1,2]
【示例 5】
输入:root = [1,null,2]
输出:[1,2]
【提示】
树中节点数目在范围 [0, 100] 内
-100 <= Node.val <= 100
进阶:递归算法很简单,你可以通过迭代算法完成吗?
【代码】
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def visit(self,root):
if not root:
return
self.ans.append(root.val)
self.visit(root.left)
self.visit(root.right)
def preorderTraversal(self, root: TreeNode) -> List[int]:
self.ans=[]
self.visit(root)
return self.ans
【进阶1】
class Solution:
def preorderTraversal(self, root: TreeNode) -> List[int]:
res = list()
if not root:
return res
stack = []
node = root
while stack or node:
while node:
res.append(node.val)
stack.append(node)
node = node.left
node = stack.pop()
node = node.right
return res
【进阶2】
class Solution:
def preorderTraversal(self, root: TreeNode) -> List[int]:
ans = []
if not root:
return ans
stack = [root]
while stack:
node = stack.pop()
ans.append(node.val)
print(ans)
if node.right:
stack.append(node.right)
if node.left:
stack.append(node.left)
return ans
【进阶3-Mirrors遍历】
class Solution:
def preorderTraversal(self, root: TreeNode) -> List[int]:
res = list()
if not root:
return res
p1 = root
while p1:
p2 = p1.left
if p2:
while p2.right and p2.right != p1:
p2 = p2.right
if not p2.right:
res.append(p1.val)
p2.right = p1
p1 = p1.left
continue
else:
p2.right = None
else:
res.append(p1.val)
p1 = p1.right
return res