美文网首页
Leetcode108将有序数组转换成平衡二叉树

Leetcode108将有序数组转换成平衡二叉树

作者: answerLDA | 来源:发表于2019-11-08 13:03 被阅读0次

题目

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

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

示例:
给定有序数组: [-10,-3,0,5,9],
一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树:
      0
     / \
   -3   9
   /   /
-10   5

分析

一步步分裂


代码

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    TreeNode* sortedArrayToBST(vector<int>& nums) {
        //如果为空,则返回NULL
        int n = nums.size();
        if(!n)
            return NULL;
        return getSubTree(nums,0,n-1);
        
    }
    /**
    * 递归建立一颗平衡二叉树:把二叉树分成左半部分L,中心节点m,右半部分R
    * m->left连接L的根节点,m->right连接R的根节点,在把L和R以同样的方式建立平衡二叉树
    **/
    TreeNode* getSubTree(vector<int>& nums,int begin,int end){
        // if(begin>end)
        //     return NULL;
        //中间节点计算,取中间靠左节点
        int mid = (begin+end+1)/2;
        TreeNode* p = new TreeNode(nums[mid]);
        //如果左边有剩余节点,构建左子树
        if(begin < mid){
            TreeNode* left = getSubTree(nums,begin,mid-1);
            p->left = left;
        }
        //如果右边有剩余节点,构建右子树
        if(mid < end){
            TreeNode* right = getSubTree(nums,mid+1,end);
            p->right = right;
        }
        return p;
    }
};

相关文章

  • Leetcode108将有序数组转换成平衡二叉树

    题目 将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。 本题中,一个高度平衡二叉树是指一个二叉树每个节...

  • 顺序存储二叉树

    Overview 顺序存储二叉树,是由数组转换成的二叉树,一个元素为数组的二叉树。 提供了数组转换成二叉树的思路 ...

  • 链表和二叉树

    单向链表 链表反转 二叉树定义 1、递归中序遍历 2、迭代中序遍历 3、二叉树层序遍历 4、判断一棵树是否为平衡树...

  • [LeetCode OJ]-Construct Binary T

    题目要求:给定一颗二叉树的中序遍历的数组inorder[]和后序遍历的数组postorder[],构造出这颗二叉树...

  • [LeetCode OJ]- Construct Binary

    题目要求:给定一颗二叉树的中序遍历的数组inorder[]和前序遍历的数组preorder[],构造出这颗二叉树。...

  • 一维数组转树形结构

    在JavaScript中如何将有父子关系的一维数组转换成树形结构:1:首先创建一个有父子结构关系的数组 2:将数组...

  • 数据结构系列0-提纲

    线性列表基于数组、基于链表ArrayList、LinkedList 栈 队列 散列表 树二叉树、搜索二叉树、平衡二...

  • 平级数据转换为树形结构

    /** *该方法用于将有父子关系的数组转换成树形结构的数组 *接收一个具有父子关系的数组作为参数 *返回一个树形结...

  • 判断一个树是否为平衡二叉树

    1 什么是平衡二叉树? 左子树和右子树的高度不能超过1 的书就叫平衡二叉树。 2 解题思路 先序遍历 ,获取左子树...

  • 2018-11-20

    数据结构 复习了森林转换成二叉树,并写出先序中序序列和后续线索,学习哈夫曼树的构造

网友评论

      本文标题:Leetcode108将有序数组转换成平衡二叉树

      本文链接:https://www.haomeiwen.com/subject/xzvibctx.html