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.将有序数组转换为二叉搜索树相关推荐

  1. ( “树” 之 BST) 109. 有序链表转换二叉搜索树 ——【Leetcode每日一题】

    二叉查找树(BST):根节点大于等于左子树所有节点,小于等于右子树所有节点. 二叉查找树中序遍历有序. 109. 有序链表转换二叉搜索树 给定一个单链表的头节点 head ,其中的元素 按升序排序 , ...

  2. 判断一棵树是否为排序二叉树(二叉搜索树)

    问题:判断一棵树是否为排序二叉树(二叉搜索树) 思路:二叉排序树的中序遍历为一递增的排序,若果不满足这一条件,则,不是二叉树 程序实现: #include <iostream> #incl ...

  3. leetcode c++未初始化_LeetCode 力扣官方题解 | 538. 把二叉搜索树转换为累加树

    力扣 538. 把二叉搜索树转换为累加树(点击查看题目) 力扣​leetcode-cn.com 题目描述 给定一个二叉搜索树(Binary Search Tree),把它转换成为累加树(Greater ...

  4. LeetCode 98验证二叉搜素树(中序遍历)99恢复二叉搜索树

    微信搜一搜:bigsai 大家都在关注的刷题.学习数据结构和算法宝藏项目 关注回复进群即可加入力扣打卡群,欢迎划水.近期打卡: LeetCode 92反转链表Ⅱ&93复制ip地址&94 ...

  5. laravel数组转换为字符串_LeetCode刷题实战108:将有序数组转换为二叉搜索树

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

  6. [leetcode-108,109] 将有序数组转换为二叉搜索树

    109. 有序链表转换二叉搜索树 Given a singly linked list where elements are sorted in ascending order, convert it ...

  7. leetcode 538. 把二叉搜索树转换为累加树 思考分析

    题目 给出二叉 搜索 树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点 node 的新值等于原树中大于或等于 node.val 的值之和. 提醒一 ...

  8. l2-004 这是二叉搜索树吗? (25分)_什么是 “线段树” ?

    线段树是一个复杂的数据结构,比较难理解,也比较难解释清楚.在我将这个数据结构反复学习了五遍的时候,我终于有了信心写出这篇介绍线段树的文章.希望大家能够掌握这种数据结构. 这篇文章比较长,建议大家耐心阅 ...

  9. 二叉搜索树的2层结点统计_植树节,程序猿种的那些树

    公历 3 月 12 日是一年一度的植树节.旨在宣传保护森林,并动员群众参加植树造林活动.说到树,程序猿们肯定不陌生,趁着这个植树节到来之时普及一下程序猿们经常遇见的树. 1. 二叉搜索树 定义 二叉搜 ...

最新文章

  1. compass安装使用960 Grid System
  2. SpringBoot第十四篇:在springboot中用redis实现消息队列
  3. 利用LeNet识别十种动物和水果
  4. 计算字符串和文件的MD5值
  5. html手机怎么样删除掉,怎么样才能删除这个叫做(手机模拟器大师)的软件?...
  6. python爬取本地天气信息_用Python写一个爬取中国天气网的终端版天气预报爬虫
  7. Spring 注入集合
  8. PostgreSQL 获评2017 DB-Engines年度DBMS榜首
  9. revit2018注册表删除_Revit软件的彻底卸载方法 注册表卸载
  10. 华为手机安卓系统可能停更,鸿蒙系统手机要来了
  11. super方法 调用父类的方法
  12. Struts2与Ajax数据交互
  13. 在WINDOWS 2003上运行Apache服务
  14. [日常摸鱼]Luogu2878 [USACO07JAN]Protecting the Flowers
  15. Emu8086下载和注册
  16. 大规模sip信令存储、查询和实时跟踪的实现
  17. 苹果无线网服务器改什么速度快,iPhone网速慢怎么办?苹果手机如何配置DNS?
  18. 家与年:解读中国文化的深层密码
  19. CKA-kubernetes 部署-hard-way-1.1-1.3
  20. (原)red-green Image.合成三维立体效果, 红绿眼镜 3D图 ,三维图片的核心算法。googler.cc上面有完善的程序和源码下载。 网上以前的那个有错误,我纠正了下~!~

热门文章

  1. tar压缩解压缩命令详解
  2. 数据中台离数据资产“价值变现”还有多远?
  3. Hive belline提交命令Error: org.apache.thrift.transport.TTransportException: java.net.SocketException:
  4. 左神算法:可见的山峰对数量(有重复值的情况)(Java版)
  5. 一文弄懂String的所有小秘密
  6. python做一个考试系统_1218Python基于Django在线考试系统设计
  7. 《深入理解Java虚拟机》读后总结(一)JVM内存模型
  8. 解密微信小程序加密信息
  9. 侧输出流简单应用-打印的完整流程
  10. 【详细解析】基础实验4-2.6 目录树 (30 分)