LeetCode_Convert Sorted Array to Binary Search Tree
2015-06-29 18:48
651 查看
一.题目
Convert Sorted Array to Binary Search Tree
Total Accepted: 44608 Total Submissions: 131357MySubmissions
Given an array where elements are sorted in ascending order, convert it to a height balanced BST.
Show Tags
Have you met this question in a real interview?
Yes
No
Discuss
二.解题技巧
将二叉查找树进行中序遍历,就可以得到一个升序排序的数组,因此,一个已经排序的数组可以看做一个中序遍历得到的数组,要得到一个高度平衡的二叉查找树,可以使得左右子树的节点数尽可能相等,因此,可以采用二分法将数组分为两个子数组,中间值作为父节点,左边的子数组作为左子树,右边的子数组作为右子树进行递归,这样就可以得到一个高度平衡的二叉查找树。三.实现代码
#include <iostream> #include <vector> using std::vector; /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) {} }; class Solution { private: TreeNode* sortedArrayToBST(vector<int>::iterator Begin, vector<int>::iterator End) { if (Begin == End) { return NULL; } vector<int>::iterator HeadIte = Begin + (End - Begin) / 2; TreeNode *Head = new TreeNode(*HeadIte); TreeNode *LeftChild = sortedArrayToBST(Begin, HeadIte); TreeNode *RightChild = sortedArrayToBST(HeadIte + 1, End); Head->left = LeftChild; Head->right = RightChild; return Head; } public: TreeNode* sortedArrayToBST(vector<int>& nums) { return sortedArrayToBST(nums.begin(), nums.end()); } };
四.体会
这道题的技巧主要在于二叉查找树的中序遍历就是一个升序的数组,因此,本题就是根据一个二叉查找树的中序构建一个二叉查找树,由于要求高度平衡,因此,可以考虑左右两个子树的结点个数相同,这样就可以得到唯一的一颗二叉查找树。版权所有,欢迎转载,转载请注明出处,谢谢
![](http://static.blog.csdn.net/xheditor/xheditor_emot/default/smile.gif)
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- 动易2006序列号破解算法公布
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- C#数据结构与算法揭秘二
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题
- C++联合体转换成C#结构的实现方法
- C#实现的算24点游戏算法实例分析
- C++编写简单的打靶游戏
- C++变位词问题分析
- C/C++数据对齐详细解析
- C++基于栈实现铁轨问题
- C++中引用的使用总结
- C++中调用Lua函数实例