二叉树中权值最大的叶节点到权值最小的叶节点的距离
2016-04-02 21:11
288 查看
有一棵二叉树,树上每个点标有权值,权值各不相同,请设计一个算法算出权值最大的叶节点到权值最小的叶节点的距离。二叉树每条边的距离为1,一个节点经过多少条边到达另一个节点为这两个节点之间的距离。给定二叉树的根节点root,请返回所求距离。 解析:首先求出二叉树中所有从根节点到叶子节点的路径,存储在vector<vector<int>> allPath中。然后找到权值最大的叶子节点和权值最小的叶子节点所在的路径所在的路径的编号。该问题可以转换为两个节点到最低公共祖先的距离问题。
#include<iostream> #include<vector> #include<algorithm> #include<stack> #include<queue> using namespace std; //树节点结构 struct TreeNode { TreeNode *left; TreeNode *right; int val; }; //创建二叉树 void createTree(TreeNode* &root) { int val; cin >> val; if (val != -1) { root = new TreeNode; root->val = val; root->left = NULL; root->right = NULL; createTree(root->left); createTree(root->right); } } class Tree { public: //求距离函数 int getDis(TreeNode* root) { getPath(root); int minIndex = 0;//叶子节点权值最小的路径编号 int maxIndex = 0;//叶子节点权值最大的路径编号 for (int i = 1; i < allPath.size(); ++i) { if (allPath[i].back() < allPath[minIndex].back()) minIndex = i; if (allPath[i].back() > allPath[maxIndex].back()) maxIndex = i; } //最低公共祖先节点的权值 int pos = 0; while (allPath[minIndex][pos] == allPath[maxIndex][pos]) { pos++; } //叶子节点权值最小(最大)到最低公共祖先的距离 int val = allPath[minIndex].size() + allPath[maxIndex].size() - 2 * pos; return val; } //得到所有的路径 void getPath(TreeNode *root) { if (root == NULL) return; if (root->left == NULL && root->right == NULL) { path.push_back(root->val); allPath.push_back(path); } else { path.push_back(root->val); if (root->left) getPath(root->left); if (root->right) getPath(root->right); } path.pop_back(); } vector<vector<int>> allPath; vector<int> path; }; int main(void) { TreeNode *root = NULL; createTree(root); Tree t; t.getPath(root); cout << t.getDis(root) << endl; system("pause"); return 0; }
相关文章推荐
- 内部类
- 采用主成分法实现因子分析中的参数估计
- 获取系统时间,计算时间差,各种时间格式之间转换
- 关于Android开发的40条优化建议
- 压缩感知的常见测量矩阵
- 构建之法阅读笔记05
- 最大连续子数组以及拓展
- 2016蘑菇街编程题5题
- 使用cmake自动构建工程
- lubuntu桌面配置需求及实现(2)
- uva 707 Robbery(记忆化搜索)
- Spark Streaming--实战篇
- iOS 企业级开发证书发布权限问题
- 分享 原生javaScript实现的楼层导航功能
- 2016 Y Combinator Winter 13家机器学习&数据分析初创公司
- 压缩感知中的数学知识:稀疏、范数、符号arg min
- 从原型链看DOM--Element类型
- 基于国家标准的EndNote 插入参考文献编号并编制索引
- 电感的主要参数
- 258. Add Digits