排序数组构造AVL树

原创 2015年11月18日 17:15:21

题目大意:假设排序数组中没有重复的元素,利用数组的元素构建一颗平衡二叉树。

思路分析:如果直接构造一颗平衡二叉树,代码量会比较大,而且也不容易实现。注意题目的意思,是利用排序数组来构建平衡二叉树。所以,需要好好利用排序的特点。再来看看,一颗平衡二叉树最基本的要求是树种的结点均匀分布,我们可以利用二分查找来解决这个问题。

1)取数组的中间位置的元素,作为根节点

2)在中间位置元素的左边部分的中间元素作为根节点的左孩子结点

3)在中间位置元素的右边部分的中间元素作为根节点的右孩子结点

4)递归执行

Java代码:

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
public class Solution {
	public TreeNode sortedArrayToBST(int[] nums) {
        if (nums.length == 0)
        	return null;
		
		return sortedArrayToBSTHelper(nums, 0, nums.length-1);
    }

	private TreeNode sortedArrayToBSTHelper(int[] nums, int start, int end) {
		TreeNode rootNode = null;
		if (start <= end) {               // 利用二分查找得到左右子结点,保证均匀分布
			int mid = (start + end) / 2;
			rootNode = new TreeNode(nums[mid]);
			rootNode.left = sortedArrayToBSTHelper(nums, start, mid-1);
			rootNode.right = sortedArrayToBSTHelper(nums, mid+1, end);
		}
				
		return rootNode;
	}
}




版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Artwoo_GIS/article/details/49910003

AVL树的构造实现

今天接触的是平衡二叉查找树,对于AVL树来说相比之前的数据结构稍微多了一些需要注意的地方,照例在此总结总结让自己巩固一二。 首先是使用AVL树的动机: 我们知道AVL树本质上是排序二叉树的一类特例...
  • zzp0753
  • zzp0753
  • 2015-08-13 13:24:07
  • 1828

平衡二叉树判定 AVL Balanced Binary Tree

题目源自于leetcode。 题目:Given a binary tree, determine if it is height-balanced. For this problem, a hei...
  • luckyjoy521
  • luckyjoy521
  • 2013-11-11 14:43:14
  • 1368

可以插入重复数据的AVL树模板实现

@todo 插入重复Key之后的处理还没做, 应该返回一个迭代器. 测试代码 /// @file exam_x_x.cpp /// @brief exam_2 /** * 编写表达式2叉树(前序...
  • LostSpeed
  • LostSpeed
  • 2016-01-13 12:08:38
  • 675

【数据结构】AVL树详解

1.什么是AVL树 AVL树又称平衡二叉搜索树,它能保证二叉树高度相对平衡,尽量降低二叉树的高度,提高搜索效率。单纯的二叉搜索树在最坏的情况下插入查找删除等操作时间复杂度会是O(N), 例如: 所...
  • pointer_y
  • pointer_y
  • 2016-11-02 21:41:34
  • 1274

AVL树的初步生成与插入操作

平衡二叉树(Balanced Binary Tree)又被称为AVL树(有别于AVL算法),且具有以下性质:它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树...
  • u011446963
  • u011446963
  • 2015-07-02 17:05:16
  • 1460

AVL树(平衡二叉树)的构造

特点:平衡二叉树要求对于每一个节点来说,他的左右子树的高度之差不超过1,如果插入或者删除一个结点使得高度之差大于1,就要进行节点之间的旋转(左旋或者右旋),将二叉树重新维持在一个平衡状态。 解决了二...
  • hello_bravo_
  • hello_bravo_
  • 2016-10-27 19:27:52
  • 1840

数据结构 - 树形选择排序 (tree selection sort) 详解 及 代码(C++)

树形选择排序 (tree selection sort) 详解 及 代码本文地址: http://blog.csdn.net/caroline_wendy算法逻辑: 根据节点的大小, 建立树, 输出树...
  • u012515223
  • u012515223
  • 2014-06-11 11:18:04
  • 2454

极大连通子图和极小连通子图

直观地说,极大就是不能再大,或者说再大也不能超过自己。因此,极大连通子图就是:  设      1)   S为G的子图,S连通,      2)   如果有S '也是G的连通子图,且S是S ...
  • gz153016
  • gz153016
  • 2016-05-23 20:12:22
  • 7803

极大连通子图和极小连通子图的定义及讲解

之前学习到图论的时候,对于极大连通子图和极小联通子图的概念不是特别理解,上网查找以后发现网上并没有给出特别详细,浅显易懂的讲解,为了帮助大家更好的理解这两个概念,我做了一些比较详细的总结,希望能帮到大...
  • ll520hmx
  • ll520hmx
  • 2017-12-19 10:27:26
  • 907

极大连通子图 + 极小连通子图 + 连通分量

基于很多初学者被数据结构图中很多概念晕头转向,这里小编手写了一份三个概念的大致情况,希望对大家有所帮助O(∩_∩)O...
  • qq_38262266
  • qq_38262266
  • 2017-08-09 18:53:49
  • 1928
收藏助手
不良信息举报
您举报文章:排序数组构造AVL树
举报原因:
原因补充:

(最多只允许输入30个字)