Convert Sorted List to Binary Search Tree&&Convert Sorted Array to Binary Search Tree——暴力解法
Convert Sorted List to Binary Search Tree
Given a singly linked list where elements are sorted in ascending order, convert it to a height balanced BST.
本来想在递归中不用for循环把问题解决点,想了很久不知道该怎么做,看了网上的答案,发现大家就是用的循环·····
用循环的话,就非常简单了,但是我写代码的时候,子函数用引用传参数的时候报错,不知道为啥,可能是默认的编译器的问题··
代码很简单,如下:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
/**
* 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:
int getLength(ListNode* &head)
{
int len=;
ListNode* p=head;
if(p==NULL)
return ;
else
{
len=;
while(p->next!=NULL)
{
len++;
p=p->next;
}
}
return len;
}
// TreeNode*getSubBST(ListNode* head,int &left,int &right)
TreeNode*getSubBST(ListNode* head,int left,int right)
{
if(left>right)
return NULL;
else
{ ListNode* p=head;
int mid=(left+right)/;
for(int i=left;i<mid;i++)
p=p->next;
TreeNode* node=new TreeNode(p->val);
node->left=getSubBST(head,left,mid-);
node->right=getSubBST(p->next,mid+,right);
return node;
}
}
TreeNode* sortedListToBST(ListNode* head) {
TreeNode* res;
int len=getLength(head);
res=getSubBST(head,,len-);
return res; }
};
Convert Sorted Array to Binary Search Tree(有了上面这道题的基础,这道题就非常简单了,直接搬过来就能用了。)
这道题思想其实是特别的简单,实现起来居然试了很多次才对,再次体现了我的代码能力不足,这道题就是很简单的递归,每次去除中间的数,剩余的两边采用递归构造子树。
把数组切分成左右两部分我采用了vector中迭代器赋值的方法,结果在里面倒腾了很久,其实不用迭代器也行,网上许多的代码都比我的精简,再次说明我的代码能力不足,思维不够开阔··················
我的代码:
/**
* 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) {
TreeNode* res=NULL;
int len=nums.size();
if(len==)
return NULL;
else if(len==)
{
res=new TreeNode(nums[]);
return res;
}
else
{
int flag;
vector<int>::iterator root;
if(len%==)
{
root=nums.begin()+len/-;
flag=len/-;
}
else
{
root=nums.begin()+len/;
flag=len/;
} res=new TreeNode(*root);
int LeftStart=;
int LeftEnd=flag;
vector<int> subNumsL(nums.begin(),root);
int RightStart=flag+;
int RightEnd=len-;
vector<int> subNumsR(root+,nums.end());
if( LeftStart<LeftEnd)
res->left=sortedArrayToBST(subNumsL);
if(RightStart<=RightEnd)
res->right=sortedArrayToBST(subNumsR);
}
return res;
}
};
网上比较精简的代码:
class Solution
{
public:
void build(vector<int> &num, TreeNode * &root, int left, int right)
{
if(left>right)
return;
int mid = (left+right)/;
root = new TreeNode(num[mid]);
build(num, root->left, left, mid-);
build(num, root->right, mid+, right);
}
TreeNode *sortedArrayToBST(vector<int> &num)
{
// Start typing your C/C++ solution below
// DO NOT write int main() function
int len = num.size();
TreeNode * root = NULL;
if(len>)
build(num, root, , len-);
return root;
}
};
Convert Sorted List to Binary Search Tree&&Convert Sorted Array to Binary Search Tree——暴力解法的更多相关文章
- [LeetCode] Convert Sorted Array to Binary Search Tree 将有序数组转为二叉搜索树
Given an array where elements are sorted in ascending order, convert it to a height balanced BST. 这道 ...
- [Leetcode][JAVA] Convert Sorted Array to Binary Search Tree && Convert Sorted List to Binary Search Tree
Convert Sorted Array to Binary Search Tree Given an array where elements are sorted in ascending ord ...
- 【leetcode】Convert Sorted Array to Binary Search Tree
Convert Sorted Array to Binary Search Tree Given an array where elements are sorted in ascending ord ...
- 【LeetCode OJ】Convert Sorted Array to Binary Search Tree
Problem Link: http://oj.leetcode.com/problems/convert-sorted-array-to-binary-search-tree/ Same idea ...
- 34. Convert Sorted List to Binary Search Tree && Convert Sorted Array to Binary Search Tree
Convert Sorted List to Binary Search Tree OJ: https://oj.leetcode.com/problems/convert-sorted-list-t ...
- LeetCode:Convert Sorted Array to Binary Search Tree,Convert Sorted List to Binary Search Tree
LeetCode:Convert Sorted Array to Binary Search Tree Given an array where elements are sorted in asce ...
- Convert Sorted Array to Binary Search Tree
Convert Sorted Array to Binary Search Tree Given an array where elements are sorted in ascending ord ...
- 37. leetcode 108. Convert Sorted Array to Binary Search Tree
108. Convert Sorted Array to Binary Search Tree 思路:利用一个有序数组构建一个平衡二叉排序树.直接递归构建,取中间的元素为根节点,然后分别构建左子树和右 ...
- [LeetCode] 108. Convert Sorted Array to Binary Search Tree ☆(升序数组转换成一个平衡二叉树)
108. Convert Sorted Array to Binary Search Tree 描述 Given an array where elements are sorted in ascen ...
- LeetCode: Convert Sorted Array to Binary Search Tree 解题报告
Convert Sorted Array to Binary Search Tree Given an array where elements are sorted in ascending ord ...
随机推荐
- webpack css压缩方案
css-loader原有的minimize选项在1.0.0版本已经移除,不能使用其进行css压缩. 目前可行的css压缩方案有: 1. postcss-loader with cssnano or u ...
- 51nod 1486 大大走格子(DP+组合数学)
枚举不合法点的思想. 把障碍x坐标为第一关键字,y坐标为第二关键字排序.f[i]表示走到第i个障碍的方案数. f[i]=C(x[i]+y[i]-2,x[i]-1)-sigma(f[j]*C(x[i]- ...
- purfer序列题表
purfer序列是对于带编号(互不相同)的无根树进行编码得到的,对于同样的n个顶点,其有n-2项,有n^(n-2)种,而且每种都合法(如果只要求他是一棵树的话)(可以通过证明翻译过程维持了各部分的树的 ...
- bzoj1026 windy数 数位DP
windy定义了一种windy数.不含前导零且相邻两个数字之差至少为2的正整数被称为windy数. windy想知道,在A和B之间,包括A和B,总共有多少个windy数? Input 包含两个整数,A ...
- springboot的application.properties与.yml的区别
现在我们的application.properties文件内容是: server.port=8090 server.session-timeout=30 server.context-path= se ...
- X210(s5pv210)中断系统
1.SoC对中断的实现机制:异常向量表 (1)异常向量表是CPU中某些特定地址的特定定义.当中断发生的时候,中断要想办法通知CPU去处理中断,怎么做到?这就要靠异常向量表.(2)在CPU设计时,就事先 ...
- 再续前缘-apache.commons.beanutils的补充
title: 再续前缘-apache.commons.beanutils的补充 toc: true date: 2016-05-32 02:29:32 categories: 实在技巧 tags: 插 ...
- UVA129 暴力dfs,有许多值得学习的代码
紫书195 题目大意:给一个困难的串,困难的串的定义就是里面没有重复的串. 思路:不需要重新对之前的串进行判重,只需要对当前的加入的字符进行改变即可. 因为是判断字典序第k个的字符串,所以要多一个全局 ...
- netcore 使用log4net
1.Install Install-Package log4net 2. conifg 創建文件:log4net.config <?xml version="1.0" enc ...
- 「6月雅礼集训 2017 Day5」学外语
[题目大意] 给出$\{P_i\}$,求经过以下操作后能够得到的不同序列个数: 第一步,选择$i, j$,交换$P_i,P_j$:第二步,把所有$P_x=i$的$P_x$变为$j$,把所有$P_x=j ...