将字符串转换为数组_LeetCode 树 108.将有序数组转换为二叉搜索树
7(108) 将有序数组转换为二叉搜索树
描述
将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。
本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。
示例
给定有序数组: [-10,-3,0,5,9],一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树:0/ -3 9/ /-10 5
Description
Given an array where elements are sorted in ascending order, convert it to a height balanced BST.
For this problem, a height-balanced binary tree is defined as a binary tree in which the depth of the two subtrees of every node never differ by more than 1.
Example
Given the sorted array: [-10,-3,0,5,9],One possible answer is: [0,-3,9,-10,null,5], which represents the following height balanced BST:0/ -3 9/ /-10 5
BitDance
Amazon
Microsoft
Adobe
Apple
Google
Tencent
Mi
HuaWei
VMware
解题
二叉搜索树 BST(Binary Search Tree) 又称为二叉查找树 二叉排序树 二叉搜索树或者是一棵空的树 或者是具有以下特征的树: 1. 若左子树非空 则左子树上所有的结点key_val均小于根节点的key_val 2. 若右子树非空 则右子树上所有的结点key_val均大于根节点的key_val 3. 左右子树本身也是二叉搜索树
因此 对二叉搜索树进行中序遍历 得到的一定是一个递增的有序序列
#include <iostream>// SortedArray to BST
#include <vector>
#include <queue>
using namespace std;
struct TreeNode{int val;TreeNode *left;TreeNode *right;TreeNode(int x):val(x),left(NULL),right(NULL) {}
};
TreeNode* levelCreateBinaryTree(const vector<int> &nums,int len,int index){//层序创建二叉树index为位置序号TreeNode *root=NULL;if(index<len&&nums[index]!=-1){root = new TreeNode(nums[index]);root->left = levelCreateBinaryTree(nums,len,2*index+1);root->right= levelCreateBinaryTree(nums,len,2*index+2);}return root;
}
void PrintMartrix(vector<vector<int>>& res){//打印二维数组for(int i=0;i<res.size();++i){cout<<"[";for(int j=0;j<res[i].size();++j){cout<<" "<<res[i][j]<<" ";}cout<<"]"<<endl;}
}
class Solution {public:vector<vector<int>> levelOrder(TreeNode* root) {vector<vector<int>> res;if(!root) return res;queue<TreeNode* > Tree;Tree.push(root);while(!Tree.empty()){vector<int> temp;int len=Tree.size();while(len--){TreeNode *pNode=Tree.front();Tree.pop();temp.push_back(pNode->val);if(pNode->left) Tree.push(pNode->left);if(pNode->right) Tree.push(pNode->right);}res.push_back(temp);}return res;}vector<int> res;vector<int> inorderTraversal(TreeNode* root) {//递归算法if(root!=NULL){inorderTraversal(root->left);res.push_back(root->val);inorderTraversal(root->right);}return res;}TreeNode* sortedArrayToBST(vector<int>& nums) {if(nums.size()==0) return NULL;if(nums.size()==1) return new TreeNode(nums[0]);int mid=nums.size()/2;TreeNode* node=new TreeNode(nums[mid]);vector<int>::const_iterator first;vector<int>::const_iterator last;first=nums.begin();last=nums.begin()+mid;vector<int> v_temp(first,last);node->left=sortedArrayToBST(v_temp);if(mid==nums.size()-1) node->right=NULL;else{first=nums.begin()+mid+1;last=nums.end();vector<int> v_temp(first,last);node->right=sortedArrayToBST(v_temp);}return node;}
};
int main(){vector<int> nums={0,1,2,3,4,5};//示例 值为-1代表所在位置为空值int len=nums.size();Solution answer;TreeNode *root=answer.sortedArrayToBST(nums);vector<vector<int>> res=answer.levelOrder(root);PrintMartrix(res);//打印层序遍历的二维数组vector<int> print=answer.inorderTraversal(root);for(auto x:print) cout<<x<<" ";//打印中序遍历的序列return 0;
}
将字符串转换为数组_LeetCode 树 108.将有序数组转换为二叉搜索树相关推荐
- ( “树” 之 BST) 109. 有序链表转换二叉搜索树 ——【Leetcode每日一题】
二叉查找树(BST):根节点大于等于左子树所有节点,小于等于右子树所有节点. 二叉查找树中序遍历有序. 109. 有序链表转换二叉搜索树 给定一个单链表的头节点 head ,其中的元素 按升序排序 , ...
- 判断一棵树是否为排序二叉树(二叉搜索树)
问题:判断一棵树是否为排序二叉树(二叉搜索树) 思路:二叉排序树的中序遍历为一递增的排序,若果不满足这一条件,则,不是二叉树 程序实现: #include <iostream> #incl ...
- leetcode c++未初始化_LeetCode 力扣官方题解 | 538. 把二叉搜索树转换为累加树
力扣 538. 把二叉搜索树转换为累加树(点击查看题目) 力扣leetcode-cn.com 题目描述 给定一个二叉搜索树(Binary Search Tree),把它转换成为累加树(Greater ...
- LeetCode 98验证二叉搜素树(中序遍历)99恢复二叉搜索树
微信搜一搜:bigsai 大家都在关注的刷题.学习数据结构和算法宝藏项目 关注回复进群即可加入力扣打卡群,欢迎划水.近期打卡: LeetCode 92反转链表Ⅱ&93复制ip地址&94 ...
- laravel数组转换为字符串_LeetCode刷题实战108:将有序数组转换为二叉搜索树
算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...
- [leetcode-108,109] 将有序数组转换为二叉搜索树
109. 有序链表转换二叉搜索树 Given a singly linked list where elements are sorted in ascending order, convert it ...
- leetcode 538. 把二叉搜索树转换为累加树 思考分析
题目 给出二叉 搜索 树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点 node 的新值等于原树中大于或等于 node.val 的值之和. 提醒一 ...
- l2-004 这是二叉搜索树吗? (25分)_什么是 “线段树” ?
线段树是一个复杂的数据结构,比较难理解,也比较难解释清楚.在我将这个数据结构反复学习了五遍的时候,我终于有了信心写出这篇介绍线段树的文章.希望大家能够掌握这种数据结构. 这篇文章比较长,建议大家耐心阅 ...
- 二叉搜索树的2层结点统计_植树节,程序猿种的那些树
公历 3 月 12 日是一年一度的植树节.旨在宣传保护森林,并动员群众参加植树造林活动.说到树,程序猿们肯定不陌生,趁着这个植树节到来之时普及一下程序猿们经常遇见的树. 1. 二叉搜索树 定义 二叉搜 ...
最新文章
- compass安装使用960 Grid System
- SpringBoot第十四篇:在springboot中用redis实现消息队列
- 利用LeNet识别十种动物和水果
- 计算字符串和文件的MD5值
- html手机怎么样删除掉,怎么样才能删除这个叫做(手机模拟器大师)的软件?...
- python爬取本地天气信息_用Python写一个爬取中国天气网的终端版天气预报爬虫
- Spring 注入集合
- PostgreSQL 获评2017 DB-Engines年度DBMS榜首
- revit2018注册表删除_Revit软件的彻底卸载方法 注册表卸载
- 华为手机安卓系统可能停更,鸿蒙系统手机要来了
- super方法 调用父类的方法
- Struts2与Ajax数据交互
- 在WINDOWS 2003上运行Apache服务
- [日常摸鱼]Luogu2878 [USACO07JAN]Protecting the Flowers
- Emu8086下载和注册
- 大规模sip信令存储、查询和实时跟踪的实现
- 苹果无线网服务器改什么速度快,iPhone网速慢怎么办?苹果手机如何配置DNS?
- 家与年:解读中国文化的深层密码
- CKA-kubernetes 部署-hard-way-1.1-1.3
- (原)red-green Image.合成三维立体效果, 红绿眼镜 3D图 ,三维图片的核心算法。googler.cc上面有完善的程序和源码下载。 网上以前的那个有错误,我纠正了下~!~
热门文章
- tar压缩解压缩命令详解
- 数据中台离数据资产“价值变现”还有多远?
- Hive belline提交命令Error: org.apache.thrift.transport.TTransportException: java.net.SocketException:
- 左神算法:可见的山峰对数量(有重复值的情况)(Java版)
- 一文弄懂String的所有小秘密
- python做一个考试系统_1218Python基于Django在线考试系统设计
- 《深入理解Java虚拟机》读后总结(一)JVM内存模型
- 解密微信小程序加密信息
- 侧输出流简单应用-打印的完整流程
- 【详细解析】基础实验4-2.6 目录树 (30 分)