本文共 1655 字,大约阅读时间需要 5 分钟。
题目:
解答:
递归建立平衡二叉树,将中间的值建立为根节点,然后左右两部分的数组分别建立为左右子树。
代码:
class Solution { public: TreeNode *sortedArrayToBST(vector &num) { if (num.size() == 0) return NULL; TreeNode *root = new TreeNode(0); //新建一个节点作为根节点 build(root, 0, num.size() - 1, num); return root; } private: void build(TreeNode *root, int start, int end, vector &num) { int mid = start + (end - start) / 2; //将中间值作为根节点的值 root->val = num[mid]; if (start <= mid - 1) //如果左边数组不为空 { TreeNode *node = new TreeNode(0); //新建一个节点,为根节点的左子节点,同时作为左子树的根节点传入递归程序 root->left = node; build(root->left, start, mid - 1, num); } if (mid + 1 <= end) //如果右边数组不为空 { TreeNode *node = new TreeNode(0); //新建一个节点,为根节点的右子节点,同时作为右子树的根节点传入递归程序 root->right = node; build(root->right, mid + 1, end, num); } } };
贴一个更简洁的代码:(重点)
/** * 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* sortedArrayToBSTUtil(vector & num, int start, int end) { if(start > end) return NULL; int mid = start+(end-start)/2; TreeNode* root = new TreeNode(num[mid]); root->left = sortedArrayToBSTUtil(num, start, mid-1); root->right = sortedArrayToBSTUtil(num, mid+1, end); return root; } TreeNode *sortedArrayToBST(vector &num) { // Start typing your C/C++ solution below // DO NOT write int main() function return sortedArrayToBSTUtil(num, 0, num.size()-1); }};
转载地址:http://qytsi.baihongyu.com/