Leetcode 108 Convert Sorted Array to Binary Search Tree 有序数组构造平衡二叉查找树
来源:互联网 发布:易语言ddos攻击器源码 编辑:程序博客网 时间:2024/05/17 02:26
原题地址
https://leetcode.com/problems/convert-sorted-array-to-binary-search-tree/
题目描述
Given an array where elements are sorted in ascending order, convert it to a height balanced BST.
给出一个有序数组(递增),使用该数组构造一个平衡二叉查找树。
解题思路
动态规划问题。我们从待选范围内选取中间数字来构造根结点,然后该取比该数字小的所有数字来构造该根结点的左子树,然后取比该数字大的所有数字来构造该根结点的右子树。
需要注意的是,对于某组数据,其中间结点可能有多种选择策略,例如:
[0, 1, 2, 3]
我们既可以选择1也可以选择2来构造根结点:
1 2 / \ or / \ 0 [2,3] [0,1] 3
在这两种情况下,其结果都是符合题目要求的,这里,我们仅选择其中一种来作为解决方案。在验证我们构造的二叉树是否是平衡二叉查找树时,我们仅判定它是否符合平衡二叉查找树的定义,但不判定具体是哪一种(leetcode应该也是这样的检查策略)。
算法描述
- 计算中间节点n/2,构造根节点;
- 使用中间节点以左的n/2个节点,递归构造左子树;
- 使用中间节点以右的n/2个节点,递归构造右子树。
代码 C
/** * 根据有序(递增)序列生成平衡二叉查找树 * input nums : 递增序列 * input numsSize : 递增序列的元素个树 */struct TreeNode* sortedArrayToBST(int* nums, int numsSize) { struct TreeNode* sortedSeqToBST(int*, int, int); return sortedSeqToBST(nums, 0, numsSize - 1);}/** * 根据有序(递增)序列的某一子序列生成平衡二叉查找树 * input nums : 递增序列 * input start : 子序列开始位置(包含) * input end : 子序列结束位置(包含) */struct TreeNode* sortedSeqToBST(int* nums, int start, int end) { /* 如果开始位置大于结束位置,返回NULL */ if (start > end) return NULL; /* 创建根节点 */ struct TreeNode* node = (struct TreeNode*)malloc(sizeof(struct TreeNode)); /* 计算中间位置的点 * 这样可以保证左右子树的点的个数的差不大于1 * 以满足题目构造平衡二叉树的要求 */ int center = (start + end) / 2; /* 保存根节点的值 */ node->val = *(nums + center); /* 分别使用中间点以左和以右的子序列构造左右子树 */ node->left = sortedSeqToBST(nums, start, center - 1); node->right = sortedSeqToBST(nums, center + 1, end); return node;}
完整代码https://github.com/Orange1991/leetcode/blob/master/108/c/main.c
代码 CPP
class Solution {public: /** * 根据有序(递增)序列生成平衡二叉查找树 * input nums : 递增序列 */ TreeNode* sortedArrayToBST(vector<int>& nums) { return sortedSeqToBST(nums, 0, nums.size() - 1); }private: /** * 根据有序(递增)序列的某一子序列生成平衡二叉查找树 * input nums : 递增序列 * input start : 子序列开始位置(包含) * input end : 子序列结束位置(包含) */ TreeNode* sortedSeqToBST(vector<int>& nums, int start, int end) { /* 如果开始位置大于结束位置,返回NULL */ if (start > end) return NULL; /* 计算中间位置的点 * 这样可以保证左右子树的点的个数的差不大于1 * 以满足题目构造平衡二叉树的要求 */ int center = (start + end) / 2; /* 创建根节点 */ /* 保存根节点的值 */ TreeNode* node = new TreeNode(nums[center]); /* 分别使用中间点以左和以右的子序列构造左右子树 */ node->left = sortedSeqToBST(nums, start, center - 1); node->right = sortedSeqToBST(nums, center + 1, end); return node; }};
完整代码https://github.com/Orange1991/leetcode/blob/master/108/cpp/main.cpp
运行情况
2015/6/3
0 0
- Leetcode 108 Convert Sorted Array to Binary Search Tree 有序数组构造平衡二叉查找树
- (将有序数组转成平衡二叉树)LeetCode#108. Convert Sorted Array to Binary Search Tree
- 根据有序数组构造二叉查找树 Convert Sorted Array to Binary Search Tree
- 有序数组转换为平衡二叉搜索树(Convert Sorted Array to Binary Search Tree)
- 108. Convert Sorted Array to Binary Search Tree 有序数组转换为平衡二叉搜索树
- 108. Convert Sorted Array to Binary Search Tree | 有序数组生成平衡二叉搜索树
- LeetCode | Convert Sorted Array to Binary Search Tree(有序数组转换成平衡二叉树搜索树)
- Leetcode#108. Convert Sorted Array to Binary Search Tree (平衡二叉查找树)
- 108.leetcode Convert Sorted Array to Binary Search Tree(medium)[数组 二分查找 二叉平衡搜索树]
- [LeetCode]108. Convert Sorted Array to Binary Search Tree(升序数组转化为平衡二叉树)
- Leetcode Convert Sorted Array to Binary Search Tree 有序数组转换成二叉搜索树BST
- 【二叉树】有序数组建平衡二叉树【108. Convert Sorted Array to Binary Search Tree】
- Leetcode 109 Convert Sorted List to Binary Search Tree 有序单链表构造平衡二插查找树
- LeetCode Convert Sorted List to Binary Search Tree(有序单链表转为平衡二叉树)
- Convert Sorted Array to Binary Search Tree (递增数组建高度平衡的二叉查找树)【leetcode】
- LeetCode OJ 之 Convert Sorted Array to Binary Search Tree(把有序数组转化为二叉搜索树)
- [leetcode]Convert Sorted Array to Binary Search Tree (有序数组转化为二叉搜索树 C语言)
- LeetCode--Convert Sorted Array to Binary Search Tree(平衡二叉搜索树)
- android.util.AndroidRuntimeException: requestFeature() must be called before adding content
- 欢迎使用CSDN-markdown编辑器
- Android 即时通讯开发——asmack jar包使用
- 了解maven
- 在Docker中从头部署自己的Spark集群
- Leetcode 108 Convert Sorted Array to Binary Search Tree 有序数组构造平衡二叉查找树
- 深度学习好的学习内容网址链接
- java中abstract怎么使用
- Android SDK在线更新镜像服务器
- SQLite数据库的SQLiteOpenHelper帮助类
- leetcode-Minimum Depth of Binary Tree &&Maximum Depth of Binary Tree
- 链接地址,运行地址,加载地址,存储地址,位置有关,位置无关
- 数据结构与算法(2、从Reverse到大O表示法)
- linux简单文件操作