ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Leetcode No.108 Convert Sorted Array to Binary Search Tree(c++实现)

2021-07-06 16:04:20  阅读:171  来源: 互联网

标签:Binary Convert right TreeNode nums Tree mid vector left


1. 题目

1.1 英文题目

Given an integer array nums where the elements are sorted in ascending order, convert it to a height-balanced binary search tree.

A height-balanced binary tree is a binary tree in which the depth of the two subtrees of every node never differs by more than one.

1.2 中文题目

给定一个内部元素按照升序排列的数组,请将其转化成高度平衡的二叉搜索树。

1.3输入输出

输入 输出
nums = [-10,-3,0,5,9] [0,-3,9,-10,null,5]
nums = [1,3] [3,1]

1.4 约束条件

  • 1 <= nums.length <= 104
  • -104 <= nums[i] <= 104
  • nums is sorted in a strictly increasing order.

2. 实验平台

IDE:VS2019
IDE版本:16.10.1
语言:c++11

3. 程序

3.1 测试程序

#include "Solution.h"
#include <vector>	// std::vector
#include<iostream>	// std::cout
using namespace std;

// 主程序
int main()
{
	// 输入
	vector<int> nums= { -10, -3, 0, 5, 9 };

	Solution solution; // 实例化Solution
	TreeNode* output = solution.sortedArrayToBST(nums); // 主功能
}

3.2 功能程序

3.2.1 最优算法

(1)代码

#pragma once
#include<vector>    // std::vector
#include<algorithm>
using namespace std;

//Definition for a binary tree node.
struct TreeNode {
    int val;
    TreeNode* left;
    TreeNode* right;
    TreeNode() : val(0), left(nullptr), right(nullptr) {}
    TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
    TreeNode(int x, TreeNode* left, TreeNode* right) : val(x), left(left), right(right) {}
    
};
//主功能
class Solution {
public:
    TreeNode* sortedArrayToBST(vector<int>& nums) 
    {
        if (nums.size() == 0) return nullptr; // 空数组情况
        int mid = nums.size() / 2; // 定义中点值
        TreeNode* node = new TreeNode(nums[mid]);  
        auto leftTree = vector<int>(nums.begin(), nums.begin() + mid); // 左边树结构
        auto rightTree = vector<int>(nums.begin() + mid + 1, nums.end()); // 右边树结构
        if (mid != 0) // 左边树结构递归 
            node->left = sortedArrayToBST(leftTree); // 递归
        if (mid != nums.size() - 1)
            node->right = sortedArrayToBST(rightTree);
        return node;
    }
};

参考:https://blog.csdn.net/u012814856/article/details/77894863

(2)解读

参考:
https://blog.csdn.net/u012814856/article/details/77894863

4.其他知识

(1)树

  • 二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树:若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;它的左、右子树也分别是二叉排序树。
  • 平衡二叉树(Self-Balancing Binary search Tree)又被称为 AVL 数,且具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1。

(2)c++结构体

a.作用

最主要的作用就是封装。封装的好处就是可以再次利用。让使用者不必关心这个是什么,只要根据定义使用就可以了。

b.C++中的结构体与类的区别

class中默认的成员访问权限是private的,而struct中则是public的。 (2)class继承默认是private继承,而从struct继承默认是public继承。

c. C++的结构体可以包含函数,而c的不可以

d. 利用构造函数定义

参考:https://blog.csdn.net/qq_33973359/article/details/105511966

e.struct和typedef struct

参考:https://www.cnblogs.com/qyaizs/articles/2039101.html
参考:https://www.cnblogs.com/zhengfa-af/p/8144786.html

标签:Binary,Convert,right,TreeNode,nums,Tree,mid,vector,left
来源: https://www.cnblogs.com/yunmeng-shi/p/14977295.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有