【LeetCode题目记录-9】排序后的数组生成平衡的二叉搜索树
来源:互联网 发布:js 声明json对象 编辑:程序博客网 时间:2024/05/21 19:27
Convert Sorted Array to Binary Search Tree
Given an array where elements are sorted in ascending order, convert it to a height balanced BST.
【分析1-原创】中间值作为根节点,左边的中间值作为左孩子,右边的中间值作为右孩子。一直递归探底即可。
/** * Definition for binary tree * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */public class Solution { public TreeNode sortedArrayToBST(int[] num) { if(num==null) return null; //获取中间的值作为根节点 TreeNode root=getMiddle(num,0,num.length-1); if(num.length==1) return root; //递归调用 arrayToBST(num,0,num.length-1,root); return root; } private void arrayToBST(int[] num,int start,int end,TreeNode node){ if(start>end) return; int middle=(start+end)>>1; node.left=getMiddle(num,start,middle-1); node.right=getMiddle(num,middle+1,end); arrayToBST(num,start,middle-1,node.left); arrayToBST(num,middle+1,end,node.right); } //获取中间的值作为节点 private TreeNode getMiddle(int[] num,int start,int end){ if(start>end) return null; return new TreeNode(num[(start+end)>>1]); } }
【分析2-非原创】更简洁的写法。
https://oj.leetcode.com/discuss/6248/why-it-shows-runtime-error-when-using-my-recursive-code
/** * Definition for binary tree public class TreeNode { int val; TreeNode * left; TreeNode right; TreeNode(int x) { val = x; } } */ public class Solution { public TreeNode sortedArrayToBST(int[] num) { return arrayToBST(num, 0, num.length - 1); } private TreeNode arrayToBST(int[] num, int start, int end) { if (start > end) return null; int middle = start + (end - start >> 1); TreeNode root = new TreeNode(num[middle]); if (start != end) { root.left = arrayToBST(num, start, middle - 1); root.right = arrayToBST(num, middle + 1, end); } return root; } }
0 0
- 【LeetCode题目记录-9】排序后的数组生成平衡的二叉搜索树
- 【LeetCode题目记录-13】二分搜索排序后的二维数组
- [LeetCode] 从排序的单链表到平衡搜索二叉树
- 算法:有序数组转为平衡的二叉搜索树
- 通过有序数组生成平衡搜索二叉树
- 题目:把排序数组转换为高度最小的二叉搜索树
- 题目10:二叉搜索树的后序遍历序列
- 题目1367:二叉搜索树的后序遍历序列
- 题目1367:二叉搜索树的后序遍历序列
- 题目1367:二叉搜索树的后序遍历序列
- 题目1367:二叉搜索树的后序遍历序列
- 题目24:二叉树搜索的后序遍历序列
- 题目1367:二叉搜索树的后序遍历序列
- 算法题目-二叉搜索树的后序遍历序列
- 后数组是否是二叉搜索树的后序
- 搜索树---排序二叉树和平衡二叉树的C++实现
- 平衡搜索二叉树的python实现
- Treap--简单的平衡二叉搜索树
- "there are stopped jobs" when you exit.
- 安卓历史版本
- Tomcat的跨区域访问问题
- HDU 2147 kiki's game(博弈论)
- memcached分布式部署
- 【LeetCode题目记录-9】排序后的数组生成平衡的二叉搜索树
- ubuntu 10.04登录界面用户管理
- hdu 5010 大搜索
- (android实战)控件选中字体颜色变色实现
- 回收页框
- 搜索(字符串暴力)
- DuiLib加载ActiveX控件崩溃
- 的施工方哈德肺结核更健康
- poj_1094 拓扑排序