它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉(搜索)树。

二分:用有序数组中中间的数生成搜索二叉树的头节点,然后对数组的左右部分分别生成左右子树即可(重复过程)。

生成的二叉树中序遍历一定还是这个序列。

非常简单,不过多叙述:

public class SortedArrayToBalancedBST {public static class Node {public int value;public Node left;public Node right;public Node(int data) {this.value = data;}}public static Node generateTree(int[] sortArr) {if (sortArr == null) {return null;}return generate(sortArr, 0, sortArr.length - 1);}public static Node generate(int[] sortArr, int start, int end) {if (start > end) {return null;}int mid = (start + end) / 2;Node head = new Node(sortArr[mid]);head.left = generate(sortArr, start, mid - 1);head.right = generate(sortArr, mid + 1, end);return head;}// for test -- print treepublic static void printTree(Node head) {System.out.println("Binary Tree:");printInOrder(head, 0, "H", 17);System.out.println();}public static void printInOrder(Node head, int height, String to, int len) {if (head == null) {return;}printInOrder(head.right, height + 1, "v", len);String val = to + head.value + to;int lenM = val.length();int lenL = (len - lenM) / 2;int lenR = len - lenM - lenL;val = getSpace(lenL) + val + getSpace(lenR);System.out.println(getSpace(height * len) + val);printInOrder(head.left, height + 1, "^", len);}public static String getSpace(int num) {String space = " ";StringBuffer buf = new StringBuffer("");for (int i = 0; i < num; i++) {buf.append(space);}return buf.toString();}public static void main(String[] args) {int[] arr = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };printTree(generateTree(arr));}}

根据数组建立平衡二叉搜索树相关推荐

  1. 牛客题霸 [将升序数组转化为平衡二叉搜索树]C++题解/答案

    牛客题霸 [将升序数组转化为平衡二叉搜索树]C++题解/答案 题目描述 给出一个升序排序的数组,将其转化为平衡二叉搜索树(BST). 题解: 二叉搜索树的定义: 二叉搜索树或者是一棵空树,或者是具有下 ...

  2. 程序员面试金典 - 面试题 17.11. 单词距离(multimap平衡二叉搜索树)

    1. 题目 有个内含单词的超大文本文件,给定任意两个单词,找出在这个文件中这两个单词的最短距离(相隔单词数). 如果寻找过程在这个文件中会重复多次,而每次寻找的单词不同,你能对此优化吗? 示例: 输入 ...

  3. 平衡二叉搜索树的创建

    平衡二叉搜索树 平衡二叉树:每个结点的左右子树高度差不超过1,左右子树均为平衡二叉树 搜索二叉树:左结点 < 根结点 <右结点 平衡二叉搜索树则是优化后的搜索二叉树,使得查找的效率提升,但 ...

  4. 二叉搜索树、平衡二叉搜索树和红黑树

    文章目录 一. 二叉搜索树(Binary Sort Tree) 二. 二叉平衡搜索树(AVL) 三. 红黑树 一. 二叉搜索树(Binary Sort Tree) 二叉搜索树,又称为二叉排序树(二叉查 ...

  5. 最适合新手看的平衡二叉搜索树(BBST)的创建,包含详细过程,一看就会(C++版)

    写在前面:本人大二小白,本篇文章是我第一次写博客,用来记录我的学习过程,我想将我在学习中遇到的各种的问题和困难写下来,希望大家能够不要犯同样的错误.我会尽可能的详细的把每一个步骤都解释清楚,那么废话不 ...

  6. 看动画学算法之:平衡二叉搜索树AVL Tree

    简介 平衡二叉搜索树是一种特殊的二叉搜索树.为什么会有平衡二叉搜索树呢? 考虑一下二叉搜索树的特殊情况,如果一个二叉搜索树所有的节点都是右节点,那么这个二叉搜索树将会退化成为链表.从而导致搜索的时间复 ...

  7. 红黑树 平衡二叉搜索树_红黑树:自我平衡的二叉搜索树,并举例说明

    红黑树 平衡二叉搜索树 什么是红黑树? (What is a Red-Black Tree?) Red-Black Tree is a type of self-balancing Binary Se ...

  8. 《恋上数据结构第1季》平衡二叉搜索树、AVL树

    AVL树 二叉搜索树缺点分析 改进二叉搜索树 平衡(Balance) 理想平衡 如何改进二叉搜索树? 平衡二叉搜索树(Balanced Binary Search Tree) AVL树 BST 对比 ...

  9. 数据结构与算法-平衡二叉搜索树

    平衡二叉搜索树 1.自平衡的二叉搜索树 2.平衡 (1)空树平衡 (2)非空树平衡 左右子树平衡 左右子树高度差绝对值 <= 1 3.平衡因子 左右子树的高度差的衡量值 -1 0 1 (一)平衡 ...

最新文章

  1. spring boot 2.0 源码分析(二)
  2. python迭代列表_Python迭代列表中列的元素
  3. J2SE,J2ME,J2EE解释
  4. 几个不错的java类、jar包及其依赖查找网站。。。
  5. jquery ajax 设置header的方式
  6. Python -- sys模块
  7. 铃儿响叮当用计算机怎么弹,铃儿响叮当钢琴弹奏教学视频
  8. 3DMax 完全重置
  9. 有道词典Chrome划词插件
  10. NXP ZigBee JN5169 DimmerLight编译过程梳理
  11. ThreeJS的性能优化方面
  12. linux解压带密码zip,linux下解压有密码的rar压缩包的方法
  13. BIOS实战之Super IO-Smart Fan
  14. 《炬丰科技-半导体工艺》化学添加剂对KOH 溶液中Si表面反应性的影响
  15. ubuntu 下应用 Python 和 SL4A 的 Android 应用程序搭建您自己的android研发环境
  16. 闹归闹,还是要说几件正事
  17. 《还是要相信》读书笔记
  18. 【跨境电商】个人做跨境电商需要准备多少钱?包括哪些费用?
  19. AUTOSAR 诊断协议栈介绍
  20. ROS .bashrc笔记

热门文章

  1. java 6大原则_java 6大设计原则 一:观察者模式
  2. redhad yum 安装mysql_redhat7通过yum安装mysql5.7.17教程
  3. C++调用matlab dll
  4. 冯诺依曼原理中计算机包括功能部件,水泥越细,强度发展越快,对混凝土性能也越好...
  5. c语言局限性,C语言陷阱与缺陷.pdf
  6. window10安装python2.7_window10下python2.7安装pip报错
  7. 电脑用linux命令大全,电脑操作时常用的一些Linux命令
  8. 【转】RocketMQ的一些特性(生产者消费者配置参数的含义)
  9. linux去掉u盘写保护,最全面win10系统下u盘写保护怎么去掉
  10. 外部依赖项很多未定义标识符_从日本编程书籍《我的第一本编程书》中译版看中文例程如何扬长避短——标识符(一)