convert-sorted-array-to-binary-search-tree

来源:互联网 发布:windows phone微信 编辑:程序博客网 时间:2024/06/05 15:49

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

/** * Definition for binary tree * struct TreeNode { *     int val; *     TreeNode *left; *     TreeNode *right; *     TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public:    TreeNode *sortedArrayToBST(vector<int> &num) {        int low=0,high=num.size()-1;        TreeNode *root=dfs(low,high,num);        return root;    }    TreeNode* dfs(int low,int high,vector<int> &num)    {        if(low>high)            return NULL;        else        {            int mid=low+(high-low+1)/2;//奇数时,取最中间的值;偶数时,取偏后的那个中间值(因为只有这样才能ac,这是测试用例设计的问题;若是单存的抛开测试用例的话,取靠前的那个中间值也是对的)            TreeNode *root=new TreeNode(num[mid]);            root->left=dfs(low,mid-1,num);            root->right=dfs(mid+1,high,num);            return root;        }            }};

解法二:

/** * Definition for binary tree * struct TreeNode { *     int val; *     TreeNode *left; *     TreeNode *right; *     TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public:    TreeNode *sortedArrayToBST(vector<int> &num) {        int low=0,high=num.size()-1;        TreeNode *root=NULL;        dfs(root,low,high,num);        return root;    }   void dfs(TreeNode *&root,int low,int high,vector<int> &num)    {        if(low>high)            return;        else        {            int mid=low+(high-low+1)/2;//奇数时,取最中间的值;偶数时,取偏后的那个中间值(因为只有这样才能ac,这是测试用例设计的问题)            root=new TreeNode(num[mid]);            dfs(root->left,low,mid-1,num);            dfs(root->right,mid+1,high,num);        }    }};
原创粉丝点击