【leetcode 971】 翻转二叉树以匹配先序遍历
题意:
给定一个先序遍历序列,给出一棵树,问能否通过翻转改树的某些左右子节点,使得该树的先序遍历序列等于给定的先序遍历序列
思路:
很基础的题目了,就是先序遍历一下,如果在这个节点的左子节点的值不等于行程中下一个值,但是右子节点的值等于,那么就翻转一下,如果两个子节点的值都不等于,那么就没有解了。
class Solution {
public:vector<int>ve;bool flag = true;int num = 0;vector<int> flipMatchVoyage(TreeNode* root, vector<int>& voyage) {num = 0;ve.clear();flag = true;dfs(root,voyage);if(!flag){ve.clear();ve.push_back(-1);}return ve;}void dfs(TreeNode* root,vector<int>& voyage){if(root->val!=voyage[num]){flag = false; }if(!flag)return ;if(root->left!=NULL){if(root->left->val!=voyage[num+1]&&root->right!=NULL&&root->right->val==voyage[num+1]){ve.push_back(root->val);TreeNode* node = root->left;root->left = root->right;root->right = node;}num++;dfs(root->left,voyage);}if(root->right!=NULL){num++;dfs(root->right,voyage);}}
};
【leetcode 971】 翻转二叉树以匹配先序遍历相关推荐
- LeetCode 971. 翻转二叉树以匹配先序遍历(DFS)
1. 题目 给定一个有 N 个节点的二叉树,每个节点都有一个不同于其他节点且处于 {1, -, N} 中的值. 通过交换节点的左子节点和右子节点,可以翻转该二叉树中的节点. 考虑从根节点开始的先序遍历 ...
- 971. 翻转二叉树以匹配先序遍历
给定一个有 N 个节点的二叉树,每个节点都有一个不同于其他节点且处于 {1, ..., N} 中的值. 通过交换节点的左子节点和右子节点,可以翻转该二叉树中的节点. 考虑从根节点开始的先序遍历报告的 ...
- leetcode971. 翻转二叉树以匹配先序遍历
leetcode971. 翻转二叉树以匹配先序遍历 这道题的说明还没有题目清晰,所以不粘题内容了. 思路 前序遍历,遇到当前节点和对应的voyage值不相等的时候,返回false. 并且看当前节点的左 ...
- leetcode971. 翻转二叉树以匹配先序遍历(dfs)
给定一个有 N 个节点的二叉树,每个节点都有一个不同于其他节点且处于 {1, -, N} 中的值. 通过交换节点的左子节点和右子节点,可以翻转该二叉树中的节点. 考虑从根节点开始的先序遍历报告的 N ...
- 二叉树非递归先序遍历
二叉树的递归先序遍历很简单,假设二叉树的结点定义如下: 1 struct BinaryTreeNode 2 { 3 int m_nValue; 4 BinaryTreeNode* m_pLeft; 5 ...
- 二叉树建立及中序遍历C++语言实现
二叉树建立及中序遍历C++语言实现: #include<stdio.h> #include<stdlib.h> typedef struct node{//二叉树结点数据结构定 ...
- 栈的亚特兰数与二叉树的前序中序遍历序列
栈的亚特兰数与二叉树的前序中序遍历 @(算法学习) 已经熟知的是二叉树的中序遍历和先序遍历可以唯一确定一棵树. 更有趣的知识点是,以先序遍历序列作为入栈序列,那么出栈序列恰为中序遍历.这样就把两种遍历 ...
- 二叉树前中后序遍历的非递归实现以及层次遍历、zig-zag型遍历详解
前言 二叉树的遍历是一个比较常见的问题,递归实现二叉树的前中后序遍历比较简单,但非递归实现二叉树的前中后序遍历相对有难度.这篇博客将详述如何使用非递归的方式实现二叉树的前中后序遍历,在进行理论描述的同 ...
- 二叉树,二叉树的归先序遍历,中序遍历,后序遍历,递归和非递归实现
二叉树,二叉树的归先序遍历,中序遍历,后序遍历,递归和非递归实现 提示:今天开始,系列二叉树的重磅基础知识和大厂高频面试题就要出炉了,咱们慢慢捋清楚! 文章目录 二叉树,二叉树的归先序遍历,中序遍历, ...
最新文章
- 开源软件5大常见问题及解决方法
- sap 事务代码跳过权限检查
- 剑与远征英雄兑换码如此少见,新玩家连抽获得数位英雄
- 异步复位的串联T触发器
- Python二级笔记(7)
- Node.js 工具模块
- 无论PC还是Mac,都能畅快地使用移动硬盘
- Js实现滚动抽奖(作弊版)
- 使用Android 实现计算器功能
- PixiJS学习(9)动画序列帧
- opencv检测动态物体
- 小鑫の日常系列故事(七)——小纸条 (字符串) SDUT
- 第九章——规范数据库设计
- Java入门教程(视频)
- Spark累加器的作用和使用
- 序列1 - 以太坊的诞生,史上最大ICO之一
- 删除微软office正版验证补丁
- OpenFPGA: 一起跨年吧!
- 服务器显示文件后缀名,获取文件后缀名
- C#时间戳计算公式、毫秒级时间戳
热门文章
- Ubuntu16.04笔记本 安装R RStudio
- 查找数组中重复的元素
- 利用python实现两个文件夹的同步
- tekton EventListener资源
- 进程间各种通信方式的C++实现
- AWS KVS(Kinesis Video Streams)之WebRTC
- AppImage应用启动报错:Cannot mount AppImage, please check your FUSE setup
- Python: 异常处理
- 电脑无法分屏,连接两个显示器,但只能检测到一个显示器,且只有一个显示器有画面
- Java 8 的 Optional 类抛异常