升序数组转化为平衡二叉搜索树

将升序数组转化为平衡二叉搜索树

http://www.nowcoder.com/questionTerminal/7e5b00f94b254da599a9472fe5ab283d

先序遍历。

注意一点即可,在求中点的过程中,理论上left + (right-left) / 2left + (right - left + 1) / 2都是合法的,但从题目中的示例可以得知,我们的代码里应使用后者才能符合题意。

这有一个小插曲,刚开始我在sortedArrayToBST中写了如下代码,结果有5%的案例出现段错误,百思不得其姐,大家猜猜问题出在哪里?

TreeNode* sortedArrayToBST(vector<int>& num) {
    TreeNode *root;
    if (num.size() < 1) return root;
    root = preOrder(num, 0, num.size() - 1);
    return root;
}

完整正确代码如下:

class Solution {
public:
    /**
     *
     * @param num int整型vector
     * @return TreeNode类
     */
    TreeNode *sortedArrayToBST(vector<int> &num) {
        if (num.size() < 1) return nullptr;
        TreeNode *root = preOrder(num, 0, num.size() - 1);
        return root;
    }

    TreeNode *preOrder(vector<int> &num, int left, int right) {
        if (left > right) return nullptr;
        // 1. 找到中间节点
        int mid = left + (right - left + 1) / 2;
        // 2. 递归构建左右
        TreeNode *root = new TreeNode(num[mid]);
        root->left = preOrder(num, left, mid - 1);
        root->right = preOrder(num, mid + 1, right);
        return root;
    }
};
刷遍天下无敌手 文章被收录于专栏

秋招刷题历程

全部评论
root没有初始化,还是一个野指针,当num为空时,返回的不是NULL,而是没有初始化的野指针root。
点赞 回复 分享
发布于 2021-10-01 22:40
貌似指针不算内置类型,因此在成员函数中不会执行默认初始化
点赞 回复 分享
发布于 2021-09-28 19:02
if (num.size() < 1) return root;
点赞 回复 分享
发布于 2020-12-24 14:57

相关推荐

03-17 23:54
黑龙江大学 Java
来个白菜也好啊qaq:可以的,大厂有的缺打手
点赞 评论 收藏
分享
评论
5
2
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务