【LeetCode】971. Flip Binary Tree To Match Preorder Traversal
题目地址: 971. Flip Binary Tree To Match Preorder Traversal
解析
本题是关于二叉树翻转的题目,给定一个二叉树,对于其中的一个节点的翻转定义为该节点的左右子节点位置的交换。root是一颗二叉树,voyage是翻转root中的某些节点后的前序遍历结果。本题解题关键是确定翻转发生的条件,即当前voyage第k个节点与root的右节点值相等且左节点存在时翻转root节点。采用二叉树前序遍历递归的方式,验证voyage是否是root的一个翻转,如果是则返回True,否则返回False:1 若当前节点root与voyage中当前元素不相等,返回False;
2 否则,若root的左节点存在且节点值与voyage中当前元素相等,则分别递归遍历左右节点;
3 否则,若root的右节点存在且节点值与voyage中当前元素相等,此时如果左节点也存在则发生反转,则把反转节点记录到结果中,然后分别递归遍历右左节点(逻辑上翻转);
4 最后,若root的左右节点都不存在,返回True代码(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相关推荐
- leetcode 971. Flip Binary Tree To Match Preorder Traversal
leetcode 971. Flip Binary Tree To Match Preorder Traversal 题意:给一颗二叉树,再给一个的数组,能否通过交换两个左右两个子节点,使得二叉树的前 ...
- leetcode | 971. Flip Binary Tree To Match Preorder Traversal(DFS/preorder)
https://leetcode.com/problems/flip-binary-tree-to-match-preorder-traversal/ 分析:题目要求,如何通过swap左右节点的方式, ...
- leetcode971. Flip Binary Tree To Match Preorder Traversal
题目:给定一个有 N 个节点的二叉树,每个节点都有一个不同于其他节点且处于 {1, -, N} 中的值. 通过交换节点的左子节点和右子节点,可以翻转该二叉树中的节点. 考虑从根节点开始的先序遍历报告的 ...
- 【LeetCode】106. Construct Binary Tree from Inorder and Postorder Traversal
Construct Binary Tree from Inorder and Postorder Traversal Given inorder and postorder traversal of ...
- 【leetcode】654. Maximum Binary Tree
题目如下: Given an integer array with no duplicates. A maximum tree building on this array is defined as ...
- 【LeetCode】222. Count Complete Tree Nodes 解题报告(Python)
[LeetCode]222. Count Complete Tree Nodes 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id: fuxuemingzhu 个 ...
- 【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 ...
- 【Leetcode】1597. Build Binary Expression Tree From Infix Expression
题目地址: https://leetcode.com/problems/build-binary-expression-tree-from-infix-expression/ 给定一个中缀表达式 s ...
- 【LeetCode】427. Construct Quad Tree 建立四叉树
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...
最新文章
- Flask 自定义过滤器多个参数传入
- sql server 提示无法彻底删除_复制-而无法删除数据库或重新配置发布订阅
- 51nod-1640--天气晴朗的魔法(简单最小生成树)
- 用c++写的一个词典工具
- Ubuntu12.04中安装ns-allinone-2.34
- 游戏制作流程全息解密
- MLC的寿命是否真如厂商标称的只有3000次?论原装芯片测试的重要性!
- 堆米微信H5页面怎么制作?易企秀微信H5页面制作,微信简历制作,
- 2021-11-10
- Matlab函数学习---sum函数(计算矩阵、数组和向量元素总和)
- 个人总结/IPC方法的优缺点和适用场景
- [LeetCode] 871. Minimum Number of Refueling Stops
- 【数学建模】Matlab实现判别分析(线性判别和二次判别分析)
- 十大iOS体育游戏评点
- 历史天气查询 Android 版本 JAVA
- 【收藏】详解FIR滤波器和IIR滤波器的区别
- lvs dr 模型配置详解
- 微信公众号上部署自己训练的聊天机器人(腾讯云服务器+TensorFlow2.1+Django3.1)
- 2022-2027年中国老年健康服务行业发展监测及投资战略研究报告
- STM32F4无人机实现串口+DMA数据帧解析