给定一个有 N 个节点的二叉树,每个节点都有一个不同于其他节点且处于 {1, …, N} 中的值。

通过交换节点的左子节点和右子节点,可以翻转该二叉树中的节点。

考虑从根节点开始的先序遍历报告的 N 值序列。将这一 N 值序列称为树的行程。

(回想一下,节点的先序遍历意味着我们报告当前节点的值,然后先序遍历左子节点,再先序遍历右子节点。)

我们的目标是翻转最少的树中节点,以便树的行程与给定的行程 voyage 相匹配。

如果可以,则返回翻转的所有节点的值的列表。你可以按任何顺序返回答案。

如果不能,则返回列表 [-1]。

代码

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode(int x) { val = x; }* }*/
class Solution {int pos=0;List<Integer> r=new ArrayList<>();public List<Integer> flipMatchVoyage(TreeNode root, int[] voyage) {flip(root,voyage);return r;}public void flip(TreeNode root,int[] voyage) {if(root==null||r.size()>0&&r.get(0)==-1) return;//如果出现了不满足的情况或者节点为空直接返回if(root.val!=voyage[pos])//交换完还是不符合则返回-1{r.clear();r.add(-1);return ;}if(root.left!=null&&root.left.val!=voyage[pos+1])//如果不符合则交换左右子树{TreeNode temp=root.left;root.left=root.right;root.right=temp;r.add(root.val);//将需要交换子树的节点入队}pos++;flip(root.left,voyage);flip(root.right,voyage);}
}

leetcode971. 翻转二叉树以匹配先序遍历(dfs)相关推荐

  1. leetcode971. 翻转二叉树以匹配先序遍历

    leetcode971. 翻转二叉树以匹配先序遍历 这道题的说明还没有题目清晰,所以不粘题内容了. 思路 前序遍历,遇到当前节点和对应的voyage值不相等的时候,返回false. 并且看当前节点的左 ...

  2. LeetCode 971. 翻转二叉树以匹配先序遍历(DFS)

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

  3. 971. 翻转二叉树以匹配先序遍历

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

  4. 【leetcode 971】 翻转二叉树以匹配先序遍历

    题意: 给定一个先序遍历序列,给出一棵树,问能否通过翻转改树的某些左右子节点,使得该树的先序遍历序列等于给定的先序遍历序列 思路: 很基础的题目了,就是先序遍历一下,如果在这个节点的左子节点的值不等于 ...

  5. 二叉树非递归先序遍历

    二叉树的递归先序遍历很简单,假设二叉树的结点定义如下: 1 struct BinaryTreeNode 2 { 3 int m_nValue; 4 BinaryTreeNode* m_pLeft; 5 ...

  6. 二叉树建立及中序遍历C++语言实现

    二叉树建立及中序遍历C++语言实现: #include<stdio.h> #include<stdlib.h> typedef struct node{//二叉树结点数据结构定 ...

  7. 栈的亚特兰数与二叉树的前序中序遍历序列

    栈的亚特兰数与二叉树的前序中序遍历 @(算法学习) 已经熟知的是二叉树的中序遍历和先序遍历可以唯一确定一棵树. 更有趣的知识点是,以先序遍历序列作为入栈序列,那么出栈序列恰为中序遍历.这样就把两种遍历 ...

  8. 二叉树前中后序遍历的非递归实现以及层次遍历、zig-zag型遍历详解

    前言 二叉树的遍历是一个比较常见的问题,递归实现二叉树的前中后序遍历比较简单,但非递归实现二叉树的前中后序遍历相对有难度.这篇博客将详述如何使用非递归的方式实现二叉树的前中后序遍历,在进行理论描述的同 ...

  9. 二叉树,二叉树的归先序遍历,中序遍历,后序遍历,递归和非递归实现

    二叉树,二叉树的归先序遍历,中序遍历,后序遍历,递归和非递归实现 提示:今天开始,系列二叉树的重磅基础知识和大厂高频面试题就要出炉了,咱们慢慢捋清楚! 文章目录 二叉树,二叉树的归先序遍历,中序遍历, ...

最新文章

  1. const 是个类型修饰符号。
  2. iconfont svg图标不能更改颜色的解决方法
  3. 一分钟先生之拨云见日看绩效
  4. XBodhi(技术框架)——序
  5. 云炬随笔20171202
  6. python数据分析可视化实例_Python数据分析及可视化实例之基于Kmean分析RFM进行用户关怀...
  7. 23V3有这种C语言表达式吗,数据结构(C语言版第2版_李云清)习题答案2012-12.doc
  8. 【渝粤题库】陕西师范大学202081 管理学 作业 (专升本、高起本、高起专)
  9. linux redis 主从配置,redis集群(主从配置)
  10. Power BI Desktop中的“提问”功能
  11. win10ltsc安装后重启提示bitlocker有问题怎么办_重装系统过程中电脑意外重启?这几步彻底摆脱安装失败的尴尬!...
  12. python 中的 Fraction 模块
  13. 0基础自学鸿蒙-Day_002 HelloWorld
  14. 迅捷路由器造成计算机无法上网,迅捷路由器不能上网怎么办
  15. DSPE-PEG4-Mal分子式:C56H103N2O15P的分子量介绍
  16. OI游记——一个不配称为OIer的失败选手的自白
  17. SOJ4480 Easy Problem IV (并查集)
  18. 这就是裸金属服务器?
  19. HDU 6578 Blank
  20. 不只是休闲:关于体感游戏的一些思考(一)--- 开篇和“随身”物件

热门文章

  1. Redis高频面试笔记:mysql8.0新特性
  2. spring解析配置文件(三)
  3. APUE学习之三个特殊位 设置用户ID(set-user-ID),设置组ID(set-group-ID),sticky...
  4. Android保存图片到本地相册
  5. mysql.zip免安装版配置
  6. ibatis 中 $与#的区别
  7. 个人材料(上报公司)
  8. Spring Cloud 中 分布式事务解决方案 -- 阿里GTS的使用
  9. Hive2.1.1、Hadoop2.7.3 部署
  10. RUNOOB python练习题 35 python print各色字体及背景