careercup-树与图 4.3
2014-12-06 10:24
357 查看
4.3 给定一个有序整数数组,元素各不相同按升序排列,编写一个算法,创建一棵高度最小的二叉查找树。
与leetcode类似题目:https://oj.leetcode.com/problems/convert-sorted-array-to-binary-search-tree/
C++实现代码:
解答
想要使构建出来的二叉树高度最小,那么对于任意结点, 它的左子树和右子树的结点数量应该相当。比如,当我们将一个数放在根结点, 那么理想情况是,我们把数组中剩下的数对半分,一半放在根结点的左子树, 另一半放在根结点的右子树。我们可以定义不同的规则来决定这些数怎样对半分, 不过最简单的方法就是取得有序数组中中间那个数,然后把小于它的放在它的左子树, 大于它的放在它的右子树。不断地递归操作即可构造这样一棵最小高度二叉树。与leetcode类似题目:https://oj.leetcode.com/problems/convert-sorted-array-to-binary-search-tree/
C++实现代码:
#include<vector> #include<iostream> using namespace std; struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) {} }; TreeNode* helper(vector<int>::iterator begin,vector<int>::iterator end) { TreeNode *root=NULL; if(begin+1==end) return new TreeNode(*begin); if(begin>=end) return NULL; int mid=(end-begin)/2; root=new TreeNode(*begin+mid); root->left=helper(begin,begin+mid); root->right=helper(begin+mid+1,end); return root; } TreeNode* createAVL(vector<int> &vec) { if(vec.empty()) return NULL; return helper(vec.begin(),vec.end()); } void inorder(TreeNode *root) { if(root) { inorder(root->left); cout<<root->val<<" "; inorder(root->right); } } int maxDepth(TreeNode *root) { if(root) { if(root->left==NULL&&root->right==NULL) return 1; int leftDepth=maxDepth(root->left); int rightDepth=maxDepth(root->right); return leftDepth>= rightDepth ?(leftDepth+1):(rightDepth+1); } return 0; } int main() { vector<int> vec= {1,2,3,4,5,6,7,8,9,10}; TreeNode *root=createAVL(vec); inorder(root); cout<<endl; cout<<maxDepth(root)<<endl; }
相关文章推荐
- CareerCup 4.1 & 4.3
- CareerCup.Cracking.the.Technical.Interview summaries
- careercup2.1
- Recursion 叠箱子最高问题 @CareerCup
- Sorting&Searching 旋转数组二分法查找 @CareerCup
- Moderate 找最小排序区间 @CareerCup
- Hard 随机洗牌函数 @CareerCup
- CareerCup Pots of gold game:看谁拿的钱多
- CareerCup Find the no. of expressions that evaluate to a Walprime
- LinkLists 删除链表中的一个给定指针的结点 @CareerCup
- Tree_Graph Validate Binary Search Tree 检测一个BST是否有效 @CareerCup
- CareerCup Generate all the possible substrings
- CareerCup Add two number
- CareerCup chapter 3 Stacks and Queues
- CareerCup Facebook Alex moving on a table
- careercup-树与图 4.2
- 奋笔疾书C++之CareerCup——面试前期准备
- Careercup面试题
- CareerCup1.1
- Recursion 计算表达式的括号组合 @CareerCup