排序数组构造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;
	}
}




版权声明:本文为博主原创文章,未经博主允许不得转载。

AVL树

之前我们提到了二叉查找树,我们说过它是一种既简单又有趣的数据结构,它足够强大,也足够简洁,但这有个先决条件,插入的数值足够随机,否则二叉查找树的很容易失衡(或者数值足够随机,但在不断的删除操作后,也会...

AVL树的构造实现

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

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

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

数据结构&&AVL树原理、插入操作详解及实现

AVL树原理、插入数据原理、实现。

看图说话之平衡二叉排序树(AVL树)

介绍了平衡二叉排序树的基本原理,重点介绍了AVL树的基本实现方法,并且给出了完整java代码实现...

二叉排序树、红黑树、AVL树最简单的理解

前言[为什么写这篇]之前在知乎上看过一个提问:为什么红黑树比AVL树用的场景更为广泛,红黑树在 STL 和 Linux 都有一定的运用。而AVL树也在 Windows进程地址空间管理 中得到了使用。既...

【LeetCode101-110】二叉树对称及存储,前序中序遍历生成二叉树,中序后序生成二叉树,数组转化为AVL平衡树,判断二叉树是否平衡

LeetCode100-110 一堆树的问题
  • zmdsjtu
  • zmdsjtu
  • 2017年04月23日 16:10
  • 231

二叉排序树(AVL树)源码

二叉排序树(AVL树)源码AVLTree.h源码#pragma once #include "stdafx.h" #include using namespace std; class AVLNod...
  • gamekit
  • gamekit
  • 2016年12月23日 14:11
  • 84

二叉树-详解平衡二叉排序树AVL

平衡二叉搜索树AVL也许因为输入值不够随机,也许因为输入顺序的原因,还或许一些插入、删除操作,会使得二叉搜索树失去平衡,造成搜索效率低落的情况。 比如上面两个树,在平衡树上寻找15就只要...

BST二叉排序树,AVL平衡二叉树,RBT红黑树,B-树,B+树,B*树

BST二叉搜索树,AVL平衡二叉树,RBT红黑树,B-树,B+树,B*树
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:排序数组构造AVL树
举报原因:
原因补充:

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