问一下一个数据结构的简单题目,另外有关(vector &num,多谢!
问一下一个数据结构的简单题目,另外有关(vector<int> &num,谢谢!!!!!!!!!!!!!!!!!!。。。。。。。。。。。。。。。。。。。。。。
题目:给一个升序数组,求一棵高度平衡的二分检索树,高度平衡是指左右子树的高度最大相差1,二分检索树是,根节点的左子树的所有节点值都小于等于根节点,右子树的所有节点值都大于等于根节点,左右子树也是二分搜索树。
注释处有个问题;另外vector<int> &num到底是什么意思理解的不明确,为什么每次递归都要 build(num,。。。。)
谢谢
------解决方案--------------------
我感觉楼主对递归的理解还不是很透彻,建议有空的时候自己写个最简单的递归好好体会一下,比如阶乘或者斐波那契。最好是用调试器单步运行看看每次调用参数的变化,同时在纸上画几个图加深理解。
举例:第一次调用build, left=0, right=15,接下来
left=0, right=7
进来之后继续
left=0, right=3
left=4, right=7 // 这里的right不是len-1
left=8, right=15
left=8, right=11 // 这里的left不是0
left=12, right=15
------解决方案--------------------
这两个实际上是同一个东西,有&的是引用。
建议楼主打开教材,找到讲引用的那一节学习一下,或者看看《高质量c++/c编程指南》里面讲的引用,然后再google一下“按值传递 按引用传递”
------解决方案--------------------
vector的引用啊,不发生拷贝,楼主可以自己写个类型,写上类型的拷贝构造函数来测试下
比方定义个类 CMyCls
fun1( vector<CMyCls> vec);
fun2( vector<CMyCls>& vec);
函数调用的时候,看看CMyCls的拷贝构造函数,可以在里面打印点东西
题目:给一个升序数组,求一棵高度平衡的二分检索树,高度平衡是指左右子树的高度最大相差1,二分检索树是,根节点的左子树的所有节点值都小于等于根节点,右子树的所有节点值都大于等于根节点,左右子树也是二分搜索树。
/**
* Definition for binary tree
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution
{
public:
void build(vector<int> &num, TreeNode * &root, int left, int right)
{
if(left>right)
return;
int mid = (left+right)/2;
root = new TreeNode(num[mid]);
build(num, root->left, left, mid-1);//我的理解递归时,这一行的left永远为0,下一行的right永远为 len-1,但替换后会报错,不知道为什么?
build(num, root->right, mid+1, 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>0)
build(num, root, 0, len-1);
return root;
}
};
注释处有个问题;另外vector<int> &num到底是什么意思理解的不明确,为什么每次递归都要 build(num,。。。。)
谢谢
------解决方案--------------------
我感觉楼主对递归的理解还不是很透彻,建议有空的时候自己写个最简单的递归好好体会一下,比如阶乘或者斐波那契。最好是用调试器单步运行看看每次调用参数的变化,同时在纸上画几个图加深理解。
举例:第一次调用build, left=0, right=15,接下来
left=0, right=7
进来之后继续
left=0, right=3
left=4, right=7 // 这里的right不是len-1
left=8, right=15
left=8, right=11 // 这里的left不是0
left=12, right=15
------解决方案--------------------
这两个实际上是同一个东西,有&的是引用。
建议楼主打开教材,找到讲引用的那一节学习一下,或者看看《高质量c++/c编程指南》里面讲的引用,然后再google一下“按值传递 按引用传递”
------解决方案--------------------
vector的引用啊,不发生拷贝,楼主可以自己写个类型,写上类型的拷贝构造函数来测试下
比方定义个类 CMyCls
fun1( vector<CMyCls> vec);
fun2( vector<CMyCls>& vec);
函数调用的时候,看看CMyCls的拷贝构造函数,可以在里面打印点东西