Convert Sorted Array to Binary Search Tree

Given an array where elements are sorted in ascending order, convert it to a height balanced BST.

题意:给一个升序排好的数组,构造一棵二叉查找树或者叫二叉搜索树BST,要求这颗树是平衡的

BST:二叉查找树,左子树所有节点都小于根节点。右子树所有节点都大于根节点,递归定义

堆(大根堆和小根堆)对应的二叉树:根节点大于所有节点(大根堆),递归定义

解题思路:

1.选数组中间元素插入到BST中。递归实现

2.如果value大于root插入右子树,value小于root插入左子树。递归实现

  1. /**
  2. * Definition for binary tree
  3. * public class TreeNode {
  4. * int val;
  5. * TreeNode left;
  6. * TreeNode right;
  7. * TreeNode(int x) { val = x; }
  8. * }
  9. */
  10. public class Solution {
  11. public TreeNode root ;
  12.  
  13. public TreeNode sortedArrayToBST(int[] num) {
  14. if(num.length == 0)
  15. return root;
  16. if(1 == num.length){
  17. return new TreeNode(num[0]);
  18. }
  19. int middle = num.length / 2;
  20. root = new TreeNode(num[middle]);
  21.  
  22. createBST(num, 0, middle - 1);
  23. createBST(num, middle + 1, num.length - 1);
  24. return root;
  25. }
  26.  
  27. /**
  28. * 根据num数组,创建一棵二叉查找树
  29. * @param num
  30. * @param start
  31. * @param end
  32. */
  33. private void createBST(int num[], int start, int end){
  34. int middle = 0;
  35. if(start <= end && start >= 0 && end <num.length){
  36. middle = (start + end) / 2;
  37.  
  38. insertNode(root, num[middle]);
  39.  
  40. createBST(num, start, middle - 1);
  41. createBST(num, middle + 1, end);
  42. }
  43. }
  44.  
  45. /**
  46. * 向root所指的BST二叉查找树中插入value
  47. * @param root
  48. * @param value
  49. */
  50. private void insertNode(TreeNode root, int value){
  51. if(value > root.val){ //比根节点大,在右子树插入
  52. if(root.right == null){
  53. root.right = new TreeNode(value);
  54. }else{
  55. root = root.right;
  56. insertNode(root, value);
  57. }
  58. }
  59. else{
  60. if(root.left == null){
  61. root.left = new TreeNode(value);
  62. }else{
  63. root = root.left;
  64. insertNode(root, value); //比根节点小的插入左子树
  65. }
  66. }
  67. }
  68.  
  69. // /**
  70. // * 先序遍历
  71. // * @param root
  72. // */
  73. // public void preTravel(TreeNode root){
  74. // if(root != null){
  75. // System.out.print(root.val + " ");
  76. // preTravel(root.left);
  77. // preTravel(root.right);
  78. // }
  79. // }
  80. }

涉及到树的,很多都会用到递归实现,DFS,先序遍历等遍历...

Convert Sorted Array to Binary Search Tree的更多相关文章

  1. [Leetcode][JAVA] Convert Sorted Array to Binary Search Tree && Convert Sorted List to Binary Search Tree

    Convert Sorted Array to Binary Search Tree Given an array where elements are sorted in ascending ord ...

  2. 【leetcode】Convert Sorted Array to Binary Search Tree

    Convert Sorted Array to Binary Search Tree Given an array where elements are sorted in ascending ord ...

  3. 【LeetCode OJ】Convert Sorted Array to Binary Search Tree

    Problem Link: http://oj.leetcode.com/problems/convert-sorted-array-to-binary-search-tree/ Same idea ...

  4. 34. Convert Sorted List to Binary Search Tree && Convert Sorted Array to Binary Search Tree

    Convert Sorted List to Binary Search Tree OJ: https://oj.leetcode.com/problems/convert-sorted-list-t ...

  5. LeetCode:Convert Sorted Array to Binary Search Tree,Convert Sorted List to Binary Search Tree

    LeetCode:Convert Sorted Array to Binary Search Tree Given an array where elements are sorted in asce ...

  6. 37. leetcode 108. Convert Sorted Array to Binary Search Tree

    108. Convert Sorted Array to Binary Search Tree 思路:利用一个有序数组构建一个平衡二叉排序树.直接递归构建,取中间的元素为根节点,然后分别构建左子树和右 ...

  7. [LeetCode] 108. Convert Sorted Array to Binary Search Tree ☆(升序数组转换成一个平衡二叉树)

    108. Convert Sorted Array to Binary Search Tree 描述 Given an array where elements are sorted in ascen ...

  8. LeetCode: Convert Sorted Array to Binary Search Tree 解题报告

    Convert Sorted Array to Binary Search Tree Given an array where elements are sorted in ascending ord ...

  9. 108. Convert Sorted Array to Binary Search Tree 109. Convert Sorted List to Binary Search Tree -- 将有序数组或有序链表转成平衡二叉排序树

    108. Convert Sorted Array to Binary Search Tree Given an array where elements are sorted in ascendin ...

随机推荐

  1. (总结)Web性能压力测试工具之WebBench详解

      PS:在运维工作中,压力测试是一项很重要的工作.比如在一个网站上线之前,能承受多大访问量.在大访问量情况下性能怎样,这些数据指标好坏将会直接影响用户体验.但是,在压力测试中存在一个共性,那就是压力 ...

  2. ASP.NET数据控件

    数据服务器控件就是能够显示数据的控件,与那些简单格式的列表控件不同,这些控件不但提供显示数据的丰富界面(可以显示多行多列数据并根据用户定义来显示),还提供了修改.删除和插入数据的接口. ASP.NET ...

  3. POJ C程序设计进阶 编程题#3:运算符判定

    编程题#3:运算符判定 来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 1000ms 内存限制: 65536kB 描述 两个 ...

  4. Java TCP异步数据接收

    之前一直采用.Net编写服务端程序,最近需要切换到Linux平台下,于是尝试采用Java编写数据服务器.TCP异步连接在C#中很容易实现,网上也有很多可供参考的代码.但Java异步TCP的参考资料较少 ...

  5. Android计时器TimerTask,Timer,Handler

    Android计时器TimerTask,Timer,若要在TimerTask中更新主线程UI,鉴于Android编程模型不允许在非主线程中更新主线程UI,因此需要结合Android的Handler实现 ...

  6. 合并果子 (codevs 1063) 题解

    [问题描述] 在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆.多多决定把所有的果子合成一堆. 每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和 ...

  7. xml结构

    一.XmlHelper using System; using System.Collections.Generic; using System.Linq; using System.Web; usi ...

  8. .NET Framework4.0 下的多线程

    一.简介 在4.0之前,多线程只能用Thread或者ThreadPool,而4.0下提供了功能强大的Task处理方式,这样免去了程序员自己维护线程池,而且可以申请取消线程等...所以本文主要描述Tas ...

  9. 3.html5的文本元素

    如果你看了第一篇的内容,你会发现我的代码是这样的: 文本 <span>文本</span> <scolia>文本</scolia> <scolia ...

  10. selenium+python cooking用法 (转)

    selenium-webdriver(python)--cookie处理 driver.get_cookies() 获得cookie信息 add_cookie(cookie_dict)  向cooki ...