小黑昨晚按摩累坏师傅,面试结果通过继续努力的leetcode之旅:971. 翻转二叉树以匹配先序遍历

递归法

# 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

在这里插入图片描述

小黑生活

按摩累坏了师傅,自己很受力,因此比较愧疚

在这里插入图片描述

早上简简单单跑了个步

在这里插入图片描述
在这里插入图片描述

看到了一个人在摸鱼,吾辈楷模

在这里插入图片描述

肥牛午饭

在这里插入图片描述

咖啡算法

在这里插入图片描述

继续加油!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值