递归法
# 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 flipMatchVoyage(self, root: Optional[TreeNode], voyage: List[int]) -> List[int]:
# 数组匹配下标
self.i = 0
flipped = []
def dfs(node):
if not node:
return True
# 该结点的值不匹配,直接返回false
if node.val != voyage[self.i]:
return False
self.i += 1
# 如果有左孩子,判断中序下一个值是否匹配,不匹配就调换顺序
if node.left and node.left.val != voyage[self.i]:
flipped.append(node.val)
node.left, node.right = node.right, node.left
left = dfs(node.left)
right = dfs(node.right)
return left and right
if dfs(root):
return flipped
return [-1]
小黑照葫芦画瓢尝试:栈
# 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 flipMatchVoyage(self, root: Optional[TreeNode], voyage: List[int]) -> List[int]:
# 数组匹配下标
i = 0
flipped = []
q = []
node = root
while node or q:
while node:
if voyage[i] != node.val:
return [-1]
i += 1
q.append(node)
if node.left and node.left.val != voyage[i]:
flipped.append(node.val)
node.left, node.right = node.right, node.left
node = node.left
top = q.pop()
node = top.right
return flipped
小黑生活
按摩累坏了师傅,自己很受力,因此比较愧疚
早上简简单单跑了个步