leetcode 108. Convert Sorted Array to Binary Search Tree 构建平衡二叉搜索树 + DFS深度优先遍历

Given an array where elements are sorted in ascending order, convert it to a height balanced BST.

根据一个排序好的数组构建一个平衡的二叉搜索树。
要和中后序构造BST中前序构造BST一起学习。

代码如下:

/*class TreeNode 
{
      int val;
      TreeNode left;
      TreeNode right;
      TreeNode(int x) { val = x; }
}*/

/*
 * 构建一个有序数组构建一个平衡的二叉搜索树,
 * 
 * 平衡树的构建直接取中间部分就可以了
 * */
public class Solution
{
    public TreeNode sortedArrayToBST(int[] nums) 
    {
        if(nums == null)
            return null;
        return getBST(nums,0,nums.length-1);
    }

     TreeNode getBST(int[] nums, int beg, int end)
     {
        if(beg <= end)
        {
            int mid = (end-beg)/2 +beg;
            TreeNode root = new TreeNode(nums[mid]);
            root.left = getBST(nums, beg, mid-1);
            root.right = getBST(nums, mid+1, end);
            return root;
        }else
            return null;
    }
}

下面是C++的做法,就是类似使用折半查找的思想去做

代码如下:

#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>

using namespace std;

/*
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) 
    {
        if (nums.size() <= 0)
            return NULL;
        return getAll(nums, 0, nums.size() - 1);
    }

    TreeNode* getAll(vector<int> a, int beg, int end)
    {
        if (beg > end)
            return NULL;
        else
        {
            int mid = (end - beg) / 2 + beg;
            TreeNode* root = new TreeNode(a[mid]);
            root->left = getAll(a, beg, mid - 1);
            root->right = getAll(a, mid + 1, end);
            return root;
        }
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值