码迷,mamicode.com
首页 > 编程语言 > 详细

平衡二叉树---将有序数组转换为二叉搜索树

时间:2020-07-04 01:26:51      阅读:77      评论:0      收藏:0      [点我收藏+]

标签:ted   简单   二叉搜索树   info   数据结构   rap   help   转换   wrapper   

将有序数组转换为二叉搜索树  -- 简单

将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。

本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。

   简单地说一下解题思路吧,平衡二叉树的特点有两个:

  •   左子树与右子树的深度之差的绝对值不超过1;
  •   左子树和右子树也是平衡二叉树。
  •        平衡二叉树的平衡调整方法有LL,RR,LR,RL型。LL与RR对称,LR与RL对称。
  •        旋转操作的正确性容易由“保持二叉排序树的特性:“中序遍历所得关键字序列自小至大有序”证明之。
  •        参照p205《数据结构》--严蔚敏

题意解读:

  1. 二叉搜索树的中序遍历是升序序列,题目给定的数组是按照升序排序的有序数组,因此可以确保数组是二叉搜索树的中序遍历序列。
  2.   如果是一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1,那么它必须选择中间的元素作为根节点。

 

  

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    
    public TreeNode sortedArrayToBST(int[] nums) {

        
        return helper(nums,0,nums.length - 1);


    }

    public TreeNode helper(int[] nums, int left, int right){

        if(left > right) {

            return null;

        }

        int mid = (left + right) / 2;

        TreeNode root = new TreeNode(nums[mid]);

        root.left = helper(nums, left, mid - 1);

        root.right = helper (nums, mid + 1, right);

        return root; 

    }
}
已完成
执行用时:0 ms
 
输入
[-10,-3,0,5,9]
输出
[0,-10,5,null,-3,null,9]
预期结果
[0,-3,9,-10,null,5]

平衡二叉树---将有序数组转换为二叉搜索树

标签:ted   简单   二叉搜索树   info   数据结构   rap   help   转换   wrapper   

原文地址:https://www.cnblogs.com/WLCYSYS/p/13233428.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!