平衡二叉树---将有序数组转换为二叉搜索树
Posted wlcysys
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了平衡二叉树---将有序数组转换为二叉搜索树相关的知识,希望对你有一定的参考价值。
将有序数组转换为二叉搜索树 -- 简单
将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。
本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。
简单地说一下解题思路吧,平衡二叉树的特点有两个:
- 左子树与右子树的深度之差的绝对值不超过1;
- 左子树和右子树也是平衡二叉树。
- 平衡二叉树的平衡调整方法有LL,RR,LR,RL型。LL与RR对称,LR与RL对称。
- 旋转操作的正确性容易由“保持二叉排序树的特性:“中序遍历所得关键字序列自小至大有序”证明之。
- 参照p205《数据结构》--严蔚敏
题意解读:
- 二叉搜索树的中序遍历是升序序列,题目给定的数组是按照升序排序的有序数组,因此可以确保数组是二叉搜索树的中序遍历序列。
- 如果是一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 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]
以上是关于平衡二叉树---将有序数组转换为二叉搜索树的主要内容,如果未能解决你的问题,请参考以下文章