求二叉树中和为某一值的路径
2012-04-23 12:26
218 查看
题目描述:
输入一个二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。
思路:
从根节点开始,把路径存起来,遇到和输入的整数相同,就把路径打印出来,这是
一种前序遍历,因为你必须先访问根节点。这里有两点:一如果题目不需要是到叶
节点的路径,那么只要判读和是否相等。如果要求要到叶节点的路径,那么再判断
下是否是叶节点就行了;二是,我的这个路径和和存数据的数据结构是否需要引用,
如果是引用,那么就要回溯,如果没有引用,相当于,你每次传递的都是一个值的
拷贝,就不需要回溯了。当然建议回溯啦,这样不会浪费栈空间。
参考资料:
[1] 《剑指offer》 何海涛 P143
代码:
View Code
输入一个二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。
思路:
从根节点开始,把路径存起来,遇到和输入的整数相同,就把路径打印出来,这是
一种前序遍历,因为你必须先访问根节点。这里有两点:一如果题目不需要是到叶
节点的路径,那么只要判读和是否相等。如果要求要到叶节点的路径,那么再判断
下是否是叶节点就行了;二是,我的这个路径和和存数据的数据结构是否需要引用,
如果是引用,那么就要回溯,如果没有引用,相当于,你每次传递的都是一个值的
拷贝,就不需要回溯了。当然建议回溯啦,这样不会浪费栈空间。
参考资料:
[1] 《剑指offer》 何海涛 P143
代码:
View Code
//二叉树中和为某一值的路径 void FindPath(BinaryTreeNode * root, vector<int> &path, int sum, int ¤tSum) { if(!root) return ; currentSum += root->m_nValue; path.push_back(root->m_nValue); //bool isLeaf = root->m_pLeft == NULL && root->m_pRight == NULL; if(currentSum == sum )//&& isLeaf 如果要求到叶节点的路径,就加上 { vector<int>::iterator iter = path.begin(); for(; iter != path.end(); iter ++) cout << *iter << " "; cout << endl; } FindPath(root->m_pLeft, path, sum, currentSum); FindPath(root->m_pRight, path, sum, currentSum); currentSum -= root->m_nValue; path.pop_back(); }
相关文章推荐
- 二叉树中和为某一值的路径
- 二叉树中和为某一值的路径
- 二叉树中和为某一值的路径
- 4.在二叉树中找出和为某一值的所有路径
- (剑指Offer)二叉树中和为某一值的路径
- 二叉树中和为某一值的路径
- 二叉树中和为某一值的路径
- 剑指offer_二叉树中和为某一值的路径
- 二叉树中和为某一值的路径(面试题 25)
- 寻找二叉树中和为某一值的路径
- 【剑指offer】Q25:二叉树中和为某一值的路径
- 面试题25:二叉树中和为某一值的路径
- 二叉树中和为某一值的路径
- 面试题25 二叉树中和为某一值的路径
- Q25:二叉树中和为某一值的路径
- 【面试题23】二叉树中和为某一值的路径
- (LeetCode)二叉树中和为某一值的路径
- 剑指offer面试题25 二叉树中和为某一值的路径
- 二叉树中和为某一值的路径
- 剑指Offer之二叉树中和为某一值的路径