二叉搜索树(平衡二叉搜索树)
二叉搜索树
1、验证是否为二叉搜索树
中序遍历看是否为递增序列
2、平衡二叉搜索树
将升序序列转为二叉平衡搜索树
/***树的结构体* Definition for a binary tree node.* struct TreeNode {* 树节点的值* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {public:TreeNode* dfs(vector<int>& nums, int start, int end){if(start > end){return nullptr;}int mid = (start+end)/2;TreeNode* root = new TreeNode(nums[mid]);root->left = dfs(nums, start, mid-1);root->right = dfs(nums, mid+1, end);return root;}TreeNode* sortedArrayToBST(vector<int>& nums) {TreeNode* res = dfs(nums, 0, nums.size()-1);return res;}
};
将二叉搜索树变平衡
思路:将二叉搜索树先变为升序序列(用第一题的方法),再将升序序列变成平衡二叉搜索树(用第二题的方法)
/*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {public:vector<int> vec;void getvalue(TreeNode* root){if(root == nullptr){return;}getvalue(root->left);vec.push_back(root->val);getvalue(root->right);}TreeNode* makeBST(vector<int> nums, int start, int end){if(start > end){return nullptr;}int mid = (start+end)/2;TreeNode* root = new TreeNode(nums[mid]);root->left = makeBST(nums, start, mid-1);root->right = makeBST(nums, mid+1, end);return root;}TreeNode* balanceBST(TreeNode* root) {getvalue(root);return makeBST(vec, 0, vec.size()-1);}
};
二叉搜索树(平衡二叉搜索树)相关推荐
- 《恋上数据结构第1季》平衡二叉搜索树、AVL树
AVL树 二叉搜索树缺点分析 改进二叉搜索树 平衡(Balance) 理想平衡 如何改进二叉搜索树? 平衡二叉搜索树(Balanced Binary Search Tree) AVL树 BST 对比 ...
- 看动画学算法之:平衡二叉搜索树AVL Tree
简介 平衡二叉搜索树是一种特殊的二叉搜索树.为什么会有平衡二叉搜索树呢? 考虑一下二叉搜索树的特殊情况,如果一个二叉搜索树所有的节点都是右节点,那么这个二叉搜索树将会退化成为链表.从而导致搜索的时间复 ...
- 牛客题霸 [将升序数组转化为平衡二叉搜索树]C++题解/答案
牛客题霸 [将升序数组转化为平衡二叉搜索树]C++题解/答案 题目描述 给出一个升序排序的数组,将其转化为平衡二叉搜索树(BST). 题解: 二叉搜索树的定义: 二叉搜索树或者是一棵空树,或者是具有下 ...
- 程序员面试金典 - 面试题 17.11. 单词距离(multimap平衡二叉搜索树)
1. 题目 有个内含单词的超大文本文件,给定任意两个单词,找出在这个文件中这两个单词的最短距离(相隔单词数). 如果寻找过程在这个文件中会重复多次,而每次寻找的单词不同,你能对此优化吗? 示例: 输入 ...
- 红黑树 平衡二叉搜索树_红黑树:自我平衡的二叉搜索树,并举例说明
红黑树 平衡二叉搜索树 什么是红黑树? (What is a Red-Black Tree?) Red-Black Tree is a type of self-balancing Binary Se ...
- 平衡二叉搜索树的创建
平衡二叉搜索树 平衡二叉树:每个结点的左右子树高度差不超过1,左右子树均为平衡二叉树 搜索二叉树:左结点 < 根结点 <右结点 平衡二叉搜索树则是优化后的搜索二叉树,使得查找的效率提升,但 ...
- 数据结构与算法-平衡二叉搜索树
平衡二叉搜索树 1.自平衡的二叉搜索树 2.平衡 (1)空树平衡 (2)非空树平衡 左右子树平衡 左右子树高度差绝对值 <= 1 3.平衡因子 左右子树的高度差的衡量值 -1 0 1 (一)平衡 ...
- VC++2012编程演练数据结构《9》平衡二叉搜索树
平衡二叉搜索树 任何结点的左子树和右子树高度最多相差1的二叉搜索树. (1)AVL树的插入算法 a. 插入结点之后仍然是AVL树,则不调整: b. 插入结点之后不再满足AVL树条件,则进行调整,根据导 ...
- DFS算法之无序列表转换为平衡二叉搜索树
题目简介:给定一个单链表,其中的元素不是有序排列的,将其转换为高度平衡的BST(二叉搜索树). 思路:我的思路就是一次遍历单链表,每遍历一个元素,就将其插入树中.在插入的过程中,先找到应该插入的位置, ...
最新文章
- PHP文件上传和文件操作案例
- 通过IDoc来实现公司间STO场景中外向交货单过账后自动触发内向交货单的功能 - Part I
- leetcode 85. Maximal Rectangle | 85. 最大矩形(单调栈)
- 03_FindInPartiallySortedMatrix.cpp
- Use BAdI to link appointment to a given opportunity during creation
- P3449-[POI2006]PAL-Palindromes【结论题,字符串hash】
- Makefile和Cmake的联系与区别
- 支持向量机(SVM)-文本分类 (1)
- P4822 [BJWC2012]冻结
- 论文笔记_CV_AD_A Survey of Computer Vision Research for Automotive Systems
- VFP9 连接mysql代码示例
- Silvaco 学习笔记——物理模型:载流子产生复合模型
- veu使用element UI 表格问题
- 用来快速检查hdf5,npy和npz文件的Python脚本
- 你知道如何从零开始学c++游戏编程吗
- oracle ora 3136,一次ORA-3136的处置
- 客制化键盘编程_最全最细客制化键盘指南!(上)
- vim 匹配行首到某个特定字符
- IEEE Fraud Detection Competition思路探索
- SEO Sitemap优化
热门文章
- 关于假如有Thread1、Thread2、Thread3、Thread4四条线程分别统计C、D、E、F四个盘的大小,所有线程都统计完毕交给Thread5线程去做汇总,应当如何实现?
- 软件测试课堂笔记之语句覆盖,判定覆盖,条件覆盖,判定/条件覆盖,在eclipse上新建测试用例
- 两个服务器组虚拟机,linux 两台虚拟机
- 【矩阵论】04——线性空间——子空间
- 简单的交换排序法(选择排序)。
- 数学计算机关系论文2000字,数学与计算机科学论文2000字_数学与计算机科学毕业论文模板...
- java 关于Scanner类中hasNextXxx()方法
- 常用的三种线性模型算法--线性回归模型、岭回归模型、套索回归模型
- 2019年第十届蓝桥杯C/C++ 省赛B组真题+题解
- RGB图像卷积生成Feature map特征图过程