《Cracking the Coding Interview》——第4章:树和图——题目3
2024-10-21 13:11:32
2014-03-19 03:34
题目:给定一个排好序的数组,设计算法将其转换为一棵二叉搜索树,要求树的高度最小。
解法:递归生成平衡二叉树,使左右子树的节点数尽量相等,所以对半开最好了。其实也可以生成一棵完全二叉树,不过写法应该不是很方便。
代码:
// 4.3 Convert sorted unique array to height-balanced binary search tree.
#include <cstdio>
using namespace std; struct TreeNode {
int val;
TreeNode *left;
TreeNode *right; TreeNode(int _val = ): val(_val), left(nullptr), right(nullptr) {};
}; void consructBSTFromSortedArray(vector<int> &v, int left, int right, TreeNode *&root)
{
if (left > right) {
root = nullptr;
} else {
int mid = (left + right + ) / ;
root = new TreeNode(v[mid]);
consructBSTFromSortedArray(v, left, mid - , root->left);
consructBSTFromSortedArray(v, mid + , right, root->right);
}
} void preorderTraversal(TreeNode *root)
{
if (root == nullptr) {
printf("# ");
} else {
printf("%d ", root->val);
preorderTraversal(root->left);
preorderTraversal(root->right);
}
} void clearBinaryTree(TreeNode *&root)
{
if (root == nullptr) {
return;
} else {
clearBinaryTree(root->left);
clearBinaryTree(root->right);
delete root;
root = nullptr;
}
} int main()
{
TreeNode *root;
int i, n;
vector<int> v; while (scanf("%d", &n) == && n > ) {
for (i = ; i < n; ++i) {
v.push_back(i + );
} consructBSTFromSortedArray(v, , n - , root);
preorderTraversal(root);
printf("\n"); v.clear();
clearBinaryTree(root);
} return ;
}
最新文章
- centos下升级mysql后遇到的小问题
- mac osx下django-admin.py出现的问题
- zk textbox 更改字体大小及高度
- 在 Linux 下搭建 Git 服务器
- JSPatch常见问题解答
- SpringMVC 拦截器不拦截静态资源的三种处理方式
- UITableView的性能优化10个小技巧
- nginx 偶发 403原因
- 第十三章、学习 Shell Scripts 简单的 shell script 练习
- C# xml2json
- poj3415
- 设计师如何为 Android 应用标注尺寸
- SharePoint 2013 中将 HTML文件转换为母版页
- pytorch学习:准备自己的图片数据
- windows2012 IIS部署GeoTrust证书踩过的坑。 视频测试可用 IIS 证书导入
- cf1047C-Enlarge GCD-(欧拉筛+map+gcd+唯一分解定理)
- web缓存服务器varnish-4.1.6的部署及配置详解
- 关于阿里云Centos服务器搭建Java网站不能访问的问题
- SharePoint Framework 企业向导(二)
- oracle start with connect by prior 递归查询用法