算法2013110901
来源:互联网 发布:linux下svn测试 编辑:程序博客网 时间:2024/05/22 09:49
题设:在二叉树的根节点到各叶子节点的所有路径中,某些路径更长(即所包含节点数目与树的高度相同),求这样的路径(任意一条即可)。
解法:先求出二叉树的高度,找到某个叶子节点所在层数为最大值即可。
#include <vector> #include <cassert> struct Node { Node *m_left; Node *m_right; int m_data; }; int getHeight(const Node *root) { if (!root) { return 0; } const int leftHeight = getHeight(root); const int rightHeight = getHeight(root);const int higher = leftHeight >= rightHeight ? leftHeight : rightHeight; return higher+1; } bool isLongestPath(const Node *node, std::vector<const Node*> *routine, int depth, int maxHeight) {assert(routine);if (!node) {return depth == maxHeight;}++depth;if (isLongestPath(node->m_left, routine, depth, maxHeight)|| isLongestPath(node->m_right, routine, depth, maxHeight)) {routine->push_back(node);return true;}return false;} void findLongestPath(const Node *root, std::vector<const Node*> *routine) { assert(root); assert(routine->empty()); const int maxHeight = getHeight(root); std::vector<const Node*> reversed; const bool longest = isLongestPath(root, &reversed, 0, maxHeight); assert(longest); assert(!reversed.empty()); for (std::vector<const Node*>::const_reverse_iterator it = reversed.rbegin(); it != reversed.rend(); ++it) { routine->push_back(*it); } }
- 算法2013110901
- 算法
- 算法
- 算法
- 算法
- 算法
- 算法
- 算法
- 算法
- 算法
- 算法
- 算法
- 算法
- 算法
- 算法
- 算法
- 算法
- 算法
- 关于Informatica的使用(转载)
- Linux之有名管道
- Mysql Oracle Java 数据类型对照
- Java排序算法总结(二):选择排序
- 我啊,程序员啊程序员
- 算法2013110901
- 利用Andriod死亡通知机制告诉service,client被kill了
- Eclipse的配置与使用
- c_str()
- iOS 7用户界面过渡指南
- lightoj 1109 struct is good
- window端口占用解决
- OGRE学习(3)
- WindowForms调用系统默认程序打开文件