LeetCode之翻转二叉树以匹配先序遍历
问题描述
给定二叉搜索树(BST)的根节点和要插入树中的值,将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据保证,新值和原始二叉搜索树中的任意节点值都不同。
注意,可能存在多种有效的插入方式,只要树在插入后仍保持为二叉搜索树即可。 你可以返回任意有效的结果。
解法
dfs
class Solution {public TreeNode insertIntoBST(TreeNode root, int val) {if (root == null) {return new TreeNode(val);}if (val < root.val) {root.left = insertIntoBST(root.left, val);} else {root.right = insertIntoBST(root.right, val);}return root;}
}
模拟
/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val = val; }* TreeNode(int val, TreeNode left, TreeNode right) {* this.val = val;* this.left = left;* this.right = right;* }* }*/
class Solution {public TreeNode insertIntoBST(TreeNode root, int val) {TreeNode now=root;if(root==null)return new TreeNode(val);while(true) {while(now.val<val) {if(now.right!=null)now=now.right;else{now.right=new TreeNode(val);return root;}}while(now.val>val) {if(now.left!=null)now=now.left;else{now.left=new TreeNode(val);return root;}}}}
}
回顾二叉树
二叉树
二叉树(binary tree)是指树中节点的度不大于2的有序树,它是一种最简单且最重要的树。二叉树的递归定义为:二叉树是一棵空树,或者是一棵由一个根节点和两棵互不相交的,分别称作根的左子树和右子树组成的非空树;左子树和右子树又同样都是二叉树。
平衡二叉树
平衡二叉树(Balanced Binary Tree)又被称为AVL树(有别于AVL算法),且具有以下性质:它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。这个方案很好的解决了二叉查找树退化成链表的问题,把插入,查找,删除的时间复杂度最好情况和最坏情况都维持在O(logN)。但是频繁旋转会使插入和删除牺牲掉O(logN)左右的时间,不过相对二叉查找树来说,时间上稳定了很多。
二叉查找树
二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。二叉搜索树作为一种经典的数据结构,它既有链表的快速插入与删除操作的特点,又有数组快速查找的优势;所以应用十分广泛,例如在文件系统和数据库系统一般会采用这种数据结构进行高效率的排序与检索操作。
LeetCode之翻转二叉树以匹配先序遍历相关推荐
- LeetCode 971. 翻转二叉树以匹配先序遍历(DFS)
1. 题目 给定一个有 N 个节点的二叉树,每个节点都有一个不同于其他节点且处于 {1, -, N} 中的值. 通过交换节点的左子节点和右子节点,可以翻转该二叉树中的节点. 考虑从根节点开始的先序遍历 ...
- leetcode971. 翻转二叉树以匹配先序遍历
leetcode971. 翻转二叉树以匹配先序遍历 这道题的说明还没有题目清晰,所以不粘题内容了. 思路 前序遍历,遇到当前节点和对应的voyage值不相等的时候,返回false. 并且看当前节点的左 ...
- 【leetcode 971】 翻转二叉树以匹配先序遍历
题意: 给定一个先序遍历序列,给出一棵树,问能否通过翻转改树的某些左右子节点,使得该树的先序遍历序列等于给定的先序遍历序列 思路: 很基础的题目了,就是先序遍历一下,如果在这个节点的左子节点的值不等于 ...
- leetcode971. 翻转二叉树以匹配先序遍历(dfs)
给定一个有 N 个节点的二叉树,每个节点都有一个不同于其他节点且处于 {1, -, N} 中的值. 通过交换节点的左子节点和右子节点,可以翻转该二叉树中的节点. 考虑从根节点开始的先序遍历报告的 N ...
- 971. 翻转二叉树以匹配先序遍历
给定一个有 N 个节点的二叉树,每个节点都有一个不同于其他节点且处于 {1, ..., 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型遍历详解
前言 二叉树的遍历是一个比较常见的问题,递归实现二叉树的前中后序遍历比较简单,但非递归实现二叉树的前中后序遍历相对有难度.这篇博客将详述如何使用非递归的方式实现二叉树的前中后序遍历,在进行理论描述的同 ...
- 二叉树,二叉树的归先序遍历,中序遍历,后序遍历,递归和非递归实现
二叉树,二叉树的归先序遍历,中序遍历,后序遍历,递归和非递归实现 提示:今天开始,系列二叉树的重磅基础知识和大厂高频面试题就要出炉了,咱们慢慢捋清楚! 文章目录 二叉树,二叉树的归先序遍历,中序遍历, ...
最新文章
- 通过shell脚本定期更新elasticsearch数据
- 【Android FFMPEG 开发】FFMPEG 读取音视频流中的数据到 AVPacket ( 初始化 AVPacket 数据 | 读取 AVPacket )
- Matlab图像处理教程
- 【逆向知识】裸函数(Naked函数)
- JDK源码系列(6)-StringBuilder
- .git目录文件过大
- LeetCode(225)——用队列实现栈(JavaScript)
- 共享智能榨汁机器人_新橙派果汁机器人-让智能现榨果汁触手可及
- 常用的7个计算机网络命令
- 网络安全防护之主机病毒查杀
- Java基础-常见IO五种模型
- python数字推盘游戏怎么显示步数_Python游戏开发:《最强大脑》同款游戏【数字华容道】...
- 预测大盘最准确的指标_通达信指标——大盘预测 (主图)
- VUE 爬坑之旅 -- 用 ES6 语法写一个工具类,并全局引用
- python实现胶囊网络_深度学习精要之CapsuleNets理论与实践(附Python代码)
- 不用中间变量交换两个数的值
- 动态规划,且学且放弃
- 豌豆荚市场上一些主流应用的支持版本
- 女学-温砚如老师的人生女学
- 矩阵论: 第二章: 内积空间
热门文章
- Android开发之解决父控件拦截子控件事件问题
- 项目中libevent几个问题
- 看微软“第四代模块化数据中心”宣传片之后的思考
- 拓端tecdat|R语言ARIMA集成模型预测时间序列分析
- 拓端tecdat|用于NLP的Python:使用Keras的多标签文本LSTM神经网络分类
- 拓端tecdat|用R语言模拟M / M / 1随机服务排队系统
- Android入门笔记02
- Jupyter Notebook Config
- linux命令---ubuntu的vim命令用法
- Python-OpenCV人脸检测(代码)