LeetCode Convert Sorted Array to Binary Search Tree
2014-12-16 21:08
267 查看
LeetCode Convert Sorted Array to Binary Search Tree
Convert Sorted Array to Binary Search TreeGiven an array where elements are sorted in ascending order, convert it to a height balanced BST.
一看题目,就感觉需要用二分法来做,因为数组是排序的,对应生成的树也要是二分搜索树。
具体分许见代码注释
//flag=1表示若此次调用成功,则是root的左子树接点;flag=2表示若此次调用成功,则是root的右子树节点 void ArrayToBST(TreeNode* root, vector<int>& num, int left, int right, int flag) { //left==num.size()/2 || right==num.size(),由于中间节点在程序最开始的时候已经创建,因此这里需要排除,免得重复 if (left > right || left==num.size()/2 || right==num.size()) return; //创建节点,并挂在root下 TreeNode* pNode = NULL; if (left == right) { pNode = new TreeNode(num[left]); pNode->left = pNode->right = NULL; if (flag == 1) root->left = pNode; else root->right = pNode; return; } int mid = (left + right) / 2; pNode = new TreeNode(num[mid]); pNode->left = pNode->right = NULL; if (flag == 1) root->left = pNode; else root->right = pNode; //构建该节点的左子树 ArrayToBST(pNode, num, left, mid-1, 1); //构建该节点的右子树 ArrayToBST(pNode, num, mid+1, right, 2); } TreeNode *sortedArrayToBST(vector<int> &num) { if (num.size() == 0) return NULL; int n = num.size(); TreeNode* root = new TreeNode(num[n/2]); root->left = root->right = NULL; //构建根节点的左子树 ArrayToBST(root, num, 0, n/2, 1); //构建根节点的右子树 ArrayToBST(root, num, n/2+1, n-1, 2); return root; }
以上代码不够简洁,经过网上的参考,优化之后的代码
TreeNode* buildTree(vector<int> &num, int left, int right) { if (left > right) return NULL; int mid = left + right / 2; TreeNode* leftNode = buildTree(num, left, mid); TreeNode* rightNode = buildTree(num, mid + 1, right); TreeNode* node = new TreeNode(num[mid]); node->left = leftNode; node->right = rightNode; return node; } TreeNode *sortedArrayToBST(vector<int> &num) { return buildTree(num, 0, num.size() - 1); }
相关文章推荐
- [LeetCode] Convert Sorted Array to Binary Search Tree, Solution
- leetcode 11: Convert Sorted Array to Binary Search Tree
- leetcode - Convert Sorted Array to Binary Search Tree
- [leetcode刷题系列]Convert Sorted Array to Binary Search Tree
- LeetCode Convert Sorted Array to Binary Search Tree
- LeetCode: Convert Sorted Array to Binary Search Tree
- Leetcode: Convert Sorted Array to Binary Search Tree
- leetcode -- Convert Sorted Array to Binary Search Tree
- [leetcode] Convert Sorted Array to Binary Search Tree
- [Leetcode 32] 108 Convert Sorted Array to Binary Search Tree
- LeetCode_Convert Sorted Array to Binary Search Tree
- LeetCode: Convert Sorted Array to Binary Search Tree
- Leetcode 108 Convert Sorted Array to Binary Search Tree
- [Leetcode] Convert Sorted Array to Binary Search Tree
- Leetcode: Convert Sorted Array to Binary Search Tree
- leetcode 11: Convert Sorted Array to Binary Search Tree
- leetcode: Convert Sorted Array to Binary Search Tree
- arrayfunction[LeetCode]Convert Sorted Array to Binary Search Tree
- [LeetCode]Convert Sorted Array to Binary Search Tree
- LeetCode Convert Sorted Array to Binary Search Tree