1. 题目地址: 971. Flip Binary Tree To Match Preorder Traversal

  2. 解析
    本题是关于二叉树翻转的题目,给定一个二叉树,对于其中的一个节点的翻转定义为该节点的左右子节点位置的交换。root是一颗二叉树,voyage是翻转root中的某些节点后的前序遍历结果。本题解题关键是确定翻转发生的条件,即当前voyage第k个节点与root的右节点值相等且左节点存在时翻转root节点。采用二叉树前序遍历递归的方式,验证voyage是否是root的一个翻转,如果是则返回True,否则返回False:

    1 若当前节点root与voyage中当前元素不相等,返回False;
    2 否则,若root的左节点存在且节点值与voyage中当前元素相等,则分别递归遍历左右节点;
    3 否则,若root的右节点存在且节点值与voyage中当前元素相等,此时如果左节点也存在则发生反转,则把反转节点记录到结果中,然后分别递归遍历右左节点(逻辑上翻转);
    4 最后,若root的左右节点都不存在,返回True

  3. 代码(Python3)

class Solution:def dfs(self, root, voyage):if not root:return Trueif root.val != voyage[self.k]:return Falseself.k += 1if root.left and root.left.val == voyage[self.k]:return self.dfs(root.left, voyage) and self.dfs(root.right, voyage)elif root.right and root.right.val == voyage[self.k]:if root.left:self.ans.append(root.val)return self.dfs(root.right, voyage) and self.dfs(root.left, voyage)return not root.left and not root.rightdef flipMatchVoyage(self, root, voyage):""":type root: TreeNode:type voyage: List[int]:rtype: List[int]"""self.k = 0self.ans = []if self.dfs(root, voyage):return self.anselse:return [-1]

参考资料: https://leetcode.com/problems/flip-binary-tree-to-match-preorder-traversal/discuss/214216/JavaC++Python-DFS-Solution

【LeetCode】971. Flip Binary Tree To Match Preorder Traversal相关推荐

  1. leetcode 971. Flip Binary Tree To Match Preorder Traversal

    leetcode 971. Flip Binary Tree To Match Preorder Traversal 题意:给一颗二叉树,再给一个的数组,能否通过交换两个左右两个子节点,使得二叉树的前 ...

  2. leetcode | 971. Flip Binary Tree To Match Preorder Traversal(DFS/preorder)

    https://leetcode.com/problems/flip-binary-tree-to-match-preorder-traversal/ 分析:题目要求,如何通过swap左右节点的方式, ...

  3. leetcode971. Flip Binary Tree To Match Preorder Traversal

    题目:给定一个有 N 个节点的二叉树,每个节点都有一个不同于其他节点且处于 {1, -, N} 中的值. 通过交换节点的左子节点和右子节点,可以翻转该二叉树中的节点. 考虑从根节点开始的先序遍历报告的 ...

  4. 【LeetCode】106. Construct Binary Tree from Inorder and Postorder Traversal

    Construct Binary Tree from Inorder and Postorder Traversal Given inorder and postorder traversal of ...

  5. 【leetcode】654. Maximum Binary Tree

    题目如下: Given an integer array with no duplicates. A maximum tree building on this array is defined as ...

  6. 【LeetCode】222. Count Complete Tree Nodes 解题报告(Python)

    [LeetCode]222. Count Complete Tree Nodes 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id: fuxuemingzhu 个 ...

  7. 【Leetcode】431. Encode N-ary Tree to Binary Tree(困难)

    一.题目 1.题目描述 Design an algorithm to encode an N-ary tree into a binary tree and decode the binary tre ...

  8. 【Leetcode】1597. Build Binary Expression Tree From Infix Expression

    题目地址: https://leetcode.com/problems/build-binary-expression-tree-from-infix-expression/ 给定一个中缀表达式 s ...

  9. 【LeetCode】427. Construct Quad Tree 建立四叉树

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...

最新文章

  1. Flask 自定义过滤器多个参数传入
  2. sql server 提示无法彻底删除_复制-而无法删除数据库或重新配置发布订阅
  3. 51nod-1640--天气晴朗的魔法(简单最小生成树)
  4. 用c++写的一个词典工具
  5. Ubuntu12.04中安装ns-allinone-2.34
  6. 游戏制作流程全息解密
  7. MLC的寿命是否真如厂商标称的只有3000次?论原装芯片测试的重要性!
  8. 堆米微信H5页面怎么制作?易企秀微信H5页面制作,微信简历制作,
  9. 2021-11-10
  10. Matlab函数学习---sum函数(计算矩阵、数组和向量元素总和)
  11. 个人总结/IPC方法的优缺点和适用场景
  12. [LeetCode] 871. Minimum Number of Refueling Stops
  13. 【数学建模】Matlab实现判别分析(线性判别和二次判别分析)
  14. 十大iOS体育游戏评点
  15. 历史天气查询 Android 版本 JAVA
  16. 【收藏】详解FIR滤波器和IIR滤波器的区别
  17. lvs dr 模型配置详解
  18. 微信公众号上部署自己训练的聊天机器人(腾讯云服务器+TensorFlow2.1+Django3.1)
  19. 2022-2027年中国老年健康服务行业发展监测及投资战略研究报告
  20. STM32F4无人机实现串口+DMA数据帧解析

热门文章

  1. HTML5 的课堂案例
  2. 前端框架Vue中各个文件夹的具体作用简介
  3. matlab可以仿真特殊电机,基于Matlab的异步电动机矢量控制系统的仿真研究
  4. Uniqlo与Fast Retailing发出警告 46万消费者账号遭入侵
  5. 基于联邦学习中毒攻击的防御策略
  6. Matlab如何在文件中写入空格和换行
  7. 算法入门-合并二叉树
  8. Oracle——删除用户以及用户下数据
  9. 2023年产品经理需要考的证书——NPDP,含金量高,666
  10. 社区儿童计算机活动总结,幼儿园与社区活动总结