您的位置:首页 > 其它

把排序数组转换为高度最小的二叉搜索树

2017-04-21 17:34 211 查看
问题描述:

给一个排序数组(从小到大),将其转换为一棵高度最小的排序二叉树。

样例

给出数组 
[1,2,3,4,5,6,7]
, 返回
4
/   \
2     6
/ \    / \
1   3  5   7


解题思路:

将排序的数组中间一个节点作为根节点,左子树比根节点值小,右子树比根节点值大。

代码:

/**

 * Definition of TreeNode:

 * class TreeNode {

 * public:

 *     int val;

 *     TreeNode *left, *right;

 *     TreeNode(int val) {

 *         this->val = val;

 *         this->left = this->right = NULL;

 *     }

 * }

 */

class Solution {

public:

    /**

     * @param A: A sorted (increasing order) array

     * @return: A tree node

     */

    TreeNode *sortedArrayToBST(vector<int> &A) {

       if(A.size()==0) return NULL;

        else {

           return  def(A,0,A.size()-1);

         }

      }

      TreeNode* def(vector<int>&A,int left,int right){

      if(left>right)  return NULL;

      int mid=(left+right)/2;

      TreeNode *tree=new TreeNode(A[mid]);

      tree->left=def(A,left,mid-1);

      tree->right=def(A,mid+1,right);

      return tree; // write your code here

    }

};
感想:

注意右子树递归
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: