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


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

    来自:LeetCode

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

    本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 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]
  • 相关阅读:
    用Java开发第一个APP
    去除字符串空格并竖向排列
    并发容器 concurrentHashMap--1.7 更改
    java并发容器CopyOnWriteArrayList 使用场景和内部实现分析
    java非并发容器ArrayList 和 LinkedList 优缺点比较及其实现源码分析
    并发容器之CopyOnWriteArrayList分析
    单例模式
    [Android]知识总结一:Activity
    阿里巴巴fastjson的使用问题
    java跨域请求的方式
  • 原文地址:https://www.cnblogs.com/WLCYSYS/p/13233428.html
Copyright © 2020-2023  润新知