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——暴力解法的更多相关文章

  1. [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. 这道 ...

  2. [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 ...

  3. 【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 ...

  4. 【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 ...

  5. 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 ...

  6. 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 ...

  7. Convert Sorted Array to Binary Search Tree

    Convert Sorted Array to Binary Search Tree Given an array where elements are sorted in ascending ord ...

  8. 37. leetcode 108. Convert Sorted Array to Binary Search Tree

    108. Convert Sorted Array to Binary Search Tree 思路:利用一个有序数组构建一个平衡二叉排序树.直接递归构建,取中间的元素为根节点,然后分别构建左子树和右 ...

  9. [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 ...

  10. 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 ...

随机推荐

  1. webpack css压缩方案

    css-loader原有的minimize选项在1.0.0版本已经移除,不能使用其进行css压缩. 目前可行的css压缩方案有: 1. postcss-loader with cssnano or u ...

  2. 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]- ...

  3. purfer序列题表

    purfer序列是对于带编号(互不相同)的无根树进行编码得到的,对于同样的n个顶点,其有n-2项,有n^(n-2)种,而且每种都合法(如果只要求他是一棵树的话)(可以通过证明翻译过程维持了各部分的树的 ...

  4. bzoj1026 windy数 数位DP

    windy定义了一种windy数.不含前导零且相邻两个数字之差至少为2的正整数被称为windy数. windy想知道,在A和B之间,包括A和B,总共有多少个windy数? Input 包含两个整数,A ...

  5. springboot的application.properties与.yml的区别

    现在我们的application.properties文件内容是: server.port=8090 server.session-timeout=30 server.context-path= se ...

  6. X210(s5pv210)中断系统

    1.SoC对中断的实现机制:异常向量表 (1)异常向量表是CPU中某些特定地址的特定定义.当中断发生的时候,中断要想办法通知CPU去处理中断,怎么做到?这就要靠异常向量表.(2)在CPU设计时,就事先 ...

  7. 再续前缘-apache.commons.beanutils的补充

    title: 再续前缘-apache.commons.beanutils的补充 toc: true date: 2016-05-32 02:29:32 categories: 实在技巧 tags: 插 ...

  8. UVA129 暴力dfs,有许多值得学习的代码

    紫书195 题目大意:给一个困难的串,困难的串的定义就是里面没有重复的串. 思路:不需要重新对之前的串进行判重,只需要对当前的加入的字符进行改变即可. 因为是判断字典序第k个的字符串,所以要多一个全局 ...

  9. netcore 使用log4net

    1.Install Install-Package log4net 2. conifg 創建文件:log4net.config <?xml version="1.0" enc ...

  10. 「6月雅礼集训 2017 Day5」学外语

    [题目大意] 给出$\{P_i\}$,求经过以下操作后能够得到的不同序列个数: 第一步,选择$i, j$,交换$P_i,P_j$:第二步,把所有$P_x=i$的$P_x$变为$j$,把所有$P_x=j ...