[编程之美-03]在二元树中找出和为某一值的所有路径
2016-10-18 23:32
501 查看
题目:输入一个整数和一棵二元树。
从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。
打印出和与输入整数相等的所有路径。
例如输入整数22 和如下二元树
10
/ \
5 12
/ \
4 7
则打印出两条路径:10, 12 和10, 5, 7。
二元树节点的数据结构定义为:
思想不是太难,还是遍历算法的运用。
代码如下:
从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。
打印出和与输入整数相等的所有路径。
例如输入整数22 和如下二元树
10
/ \
5 12
/ \
4 7
则打印出两条路径:10, 12 和10, 5, 7。
二元树节点的数据结构定义为:
struct BinaryTreeNode // a node in the binary tree { int m_nValue; // value of node BinaryTreeNode *m_pLeft; // left child of node BinaryTreeNode *m_pRight; // right child of node };
思想不是太难,还是遍历算法的运用。
代码如下:
#include<iostream> #include<vector> using namespace std; struct BiTreeNode { int m_nValue; BiTreeNode *m_pleft; BiTreeNode *m_pright; }; void addBiTreeNode(BiTreeNode *&pCurrent, int value); void printPaths(BiTreeNode *pRoot, int sum, vector<int> &path, int ¤tSum); int main() { BiTreeNode *pRoot = NULL; addBiTreeNode(pRoot, 10); addBiTreeNode(pRoot, 5); addBiTreeNode(pRoot, 4); addBiTreeNode(pRoot, 7); addBiTreeNode(pRoot, 12); vector<int> path; int sum = 22, currentSum = 0; printPaths(pRoot, sum, path, currentSum); return 0; } void addBiTreeNode(BiTreeNode *&pCurrent, int value) { if(pCurrent == NULL) { BiTreeNode *pBiTree = new BiTreeNode(); pBiTree->m_nValue = value; pBiTree->m_pleft = NULL; pBiTree->m_pright = NULL; pCurrent = pBiTree; } else { if((pCurrent->m_nValue) > value) addBiTreeNode(pCurrent->m_pleft, value); else if((pCurrent->m_nValue) < value) addBiTreeNode(pCurrent->m_pright, value); } } void printPaths(BiTreeNode *pRoot, int sum, vector<int> &path, int ¤tSum) { if(pRoot == NULL) return ; currentSum += pRoot->m_nValue; path.push_back(pRoot->m_nValue); if(pRoot->m_pleft == NULL && pRoot->m_pright == NULL) { if(sum == currentSum) { vector<int>::iterator it; for(it = path.begin(); it != path.end(); it ++) cout<<*it<<" "; cout<<endl; } } if(pRoot->m_pleft != NULL) printPaths(pRoot->m_pleft, sum, path, currentSum); if(pRoot->m_pright != NULL) printPaths(pRoot->m_pright, sum, path, currentSum); currentSum -= pRoot->m_nValue; path.pop_back(); }
相关文章推荐
- [编程之美-12]在二元树中找出和为某一值的所有路径
- 【编程题目】在二元树中找出和为某一值的所有路径(树)
- 4.在二元树中找出和为某一值的所有路径
- 在二元树中找出和为某一值的所有路径的个人代码
- 【练习】在二元树中找出和为某一值的所有路径
- 在二元树中找出和为某一值的所有路径
- 在二元树中找出和为某一值的所有路径
- 【面试题】在二元树中找出和为某一值的所有路径
- 程序员面试题精选100题(04)-在二元树中找出和为某一值的所有路径
- 在二元树中找出和为某一值的所有路径
- 算法题23 在二元树中找出和为某一值的所有路径
- 在二元树中找出和为某一值的所有路径
- 程序员面试100题之四,在二元树中找出和为某一值的所有路径
- 100题_04 在二元树中找出和为某一值的所有路径
- 程序员面试题精选(04)-在二元树中找出和为某一值的所有路径
- 程序员面试题精选(4):在二元树中找出和为某一值的所有路径
- 在二元树中找出和为某一值的所有路径
- 练习系列 - 6、在二元树中找出和为某一值的所有路径
- 【转帖】在二元树中找出和为某一值的所有路径
- 程序员面试题精选100题(04)-在二元树中找出和为某一值的所有路径