1. /**
  2. * Definition for a binary tree node.
  3. * public class TreeNode {
  4. * public int val;
  5. * public TreeNode left;
  6. * public TreeNode right;
  7. * public TreeNode(int x) { val = x; }
  8. * }
  9. */
  10. public class Solution
  11. {
  12. //private TreeNode Insert(TreeNode T, int x)
  13. //{
  14. // if (T == null)
  15. // {
  16. // T = new TreeNode(x);
  17. // return T;
  18. // }
  19. // else if (x < T.val)
  20. // {
  21. // T.left = Insert(T.left, x);
  22. // }
  23. // else if (x > T.val)
  24. // {
  25. // T.right = Insert(T.right, x);
  26. // }
  27. // return T;
  28. //}
  29.  
  30. Queue<TreeNode> Q = new Queue<TreeNode>();
  31.  
  32. List<TreeNode> TreeList = new List<TreeNode>();
  33.  
  34. void InOrder(TreeNode node)
  35. {
  36. if (node != null)
  37. {
  38. if (node.left != null)
  39. {
  40. InOrder(node.left);
  41. }
  42.  
  43. //中序处理
  44. TreeList.Add(node);
  45.  
  46. if (node.right != null)
  47. {
  48. InOrder(node.right);
  49. }
  50. }
  51. }
  52.  
  53. TreeNode BFS(int count)
  54. {
  55. int index = ;
  56. TreeNode root = null;
  57. while (Q.Count > && index < count)
  58. {
  59. var n = Q.Dequeue();
  60. if (n == null)
  61. {
  62. index++;
  63. n = new TreeNode(index);
  64. root = n;
  65. Q.Enqueue(n);
  66. }
  67. else
  68. {
  69. if (n.left == null && index < count)
  70. {
  71. index++;
  72. n.left = new TreeNode(index);
  73.  
  74. Q.Enqueue(n.left);
  75. }
  76. if (n.right == null && index < count)
  77. {
  78. index++;
  79. n.right = new TreeNode(index);
  80. Q.Enqueue(n.right);
  81. }
  82. }
  83. }
  84. return root;
  85. }
  86.  
  87. public TreeNode SortedArrayToBST(int[] nums)
  88. {
  89. var count = nums.Length;
  90. Q.Enqueue(null);
  91. var root = BFS(count);
  92.  
  93. InOrder(root);
  94.  
  95. for (int i = ; i < TreeList.Count; i++)
  96. {
  97. TreeList[i].val = nums[i];
  98. }
  99.  
  100. return root;
  101. }
  102. }

https://leetcode.com/problems/convert-sorted-array-to-binary-search-tree/#/description

补充一个python的实现,使用递归处理:

  1. class Solution:
  2. def sortedArrayToBST(self, nums: List[int]) -> TreeNode:
  3. n = len(nums)
  4. if n == :#终止条件,返回空
  5. return None
  6. if n == :#终止条件,返回单节点
  7. return TreeNode(nums[])
  8. mid = n //
  9. root = TreeNode(nums[mid])#将数组从中间一分为二
  10. root.left = self.sortedArrayToBST(nums[:mid])#左子树
  11. root.right = self.sortedArrayToBST(nums[mid+:])#右子树
  12. return root#返回

leetcode108的更多相关文章

  1. [Swift]LeetCode108. 将有序数组转换为二叉搜索树 | Convert Sorted Array to Binary Search Tree

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

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

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

  3. LeetCode108.将有序数组转换为二叉搜索树

    将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树. 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1. 示例: 给定有序数组: [-10,-3,0, ...

  4. LeetCode108——Convert Sorted Array to Binary Search Tree

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

  5. LeetCode108 Convert Sorted Array to Binary Search Tree

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

  6. LeetCode108 将有序数组转为二叉搜索树

    将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树. 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1. 示例: 给定有序数组: [-10,-3,0, ...

  7. LeetCode108.有序数组转二叉搜索树

    题目 1 class Solution { 2 public: 3 TreeNode* sortedArrayToBST(vector<int>& nums) { 4 if(num ...

  8. c++算法实现(一) - 递归和初始化

    递归 写递归函数经常出错,提醒自己两个规则: 1. 一般来说递归函数中不应该出现for.while之类的循环语句, 因为递归就是循环的另外一种实现: 2. 注意基线条件,具体参考<算法图解> ...

  9. leetcode_二叉树篇_python

    主要是深度遍历和层序遍历的递归和迭代写法. 另外注意:因为求深度可以从上到下去查 所以需要前序遍历(中左右),而高度只能从下到上去查,所以只能后序遍历(左右中). 所有题目首先考虑root否是空.有的 ...

随机推荐

  1. 《DSP using MATLAB》Problem 3.6

    逆DTFT定义如下: 需要求积分,

  2. CSS 属性用法备忘录

    ☆ margin: 0; padding: 0; :{ 顺时针 margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: ...

  3. Hadoop伪分布模式操作

    http://blog.csdn.net/wangloveall/article/details/20195813 摘要:本文介绍Hadoop伪分布模式操作,适合于Hadoop学习.开发和调试. 关键 ...

  4. lets encrypt 申请nginx 泛域名

    1. 安装certbot工具 wget https://dl.eff.org/certbot-auto chmod a+x ./certbot-auto 2. 申请通配符域名 ./certbot-au ...

  5. Why my setting does not work?

    lab            mypc      server7000    ->  5900 1080    ->  10800            10800 -> inter ...

  6. php单例模式实现对象只被创建一次 mysql单例操作类

    这是我在php面试题中遇到的一道试题,单例模式按字面来看就是某一个类只有一个实例,这样做的好处还是很大的,比如说数据库的连接,我们只需要实例化一次,不需要每次都去new了,这样极大的降低了资源的耗费. ...

  7. vue2.0 不引用第三方包的情况下实现嵌套对象的拖拽排序功能

    先上一张效果图,然后再上代码(由于只做效果,未做数据相关的处理:实际处理数据时不修改 dom 元素,只是利用 dom 元素传递数据,然后需改数据,靠数据驱动效果) <div :id=" ...

  8. bzoj1034 泡泡堂

    Description 第XXXX届NOI期间,为了加强各省选手之间的交流,组委会决定组织一场省际电子竞技大赛,每一个省的代表队由n名选手组成,比赛的项目是老少咸宜的网络游戏泡泡堂.每一场比赛前,对阵 ...

  9. 中点Brehensam画线算法

    #include<stdio.h> #include<stdlib.h> #include"graphics.h" //函数声明 void MidBreha ...

  10. Appium简介和初步使用520-1

    1.移动互联网架构简化图 2.Appium的优势 * 多种开发模式支持 native hybrid webview * 多平台支持 android ios * 跨语言 java python ruby ...