求二叉树中和为某一值的路径

本文介绍了一种算法,用于查找二叉树中节点值之和等于特定整数的所有路径。该算法采用前序遍历的方式,递归地检查每个节点,并通过递归调用跟踪路径和。文中还讨论了如何处理路径的存储及回溯问题。

题目描述:

  输入一个二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。

思路:

  从根节点开始,把路径存起来,遇到和输入的整数相同,就把路径打印出来,这是

  一种前序遍历,因为你必须先访问根节点。这里有两点:一如果题目不需要是到叶

  节点的路径,那么只要判读和是否相等。如果要求要到叶节点的路径,那么再判断

  下是否是叶节点就行了;二是,我的这个路径和和存数据的数据结构是否需要引用,

  如果是引用,那么就要回溯,如果没有引用,相当于,你每次传递的都是一个值的

  拷贝,就不需要回溯了。当然建议回溯啦,这样不会浪费栈空间。

参考资料:

[1]  《剑指offer》 何海涛  P143

代码:

View Code
 1 //二叉树中和为某一值的路径
 2 void FindPath(BinaryTreeNode * root, vector<int> &path, int sum, int &currentSum)
 3 {
 4     if(!root) return ;
 5     currentSum += root->m_nValue;
 6     path.push_back(root->m_nValue);
 7     //bool isLeaf = root->m_pLeft == NULL && root->m_pRight == NULL;
 8     if(currentSum == sum )//&& isLeaf 如果要求到叶节点的路径,就加上
 9     {
10         vector<int>::iterator iter = path.begin();
11         for(; iter != path.end(); iter ++)
12             cout << *iter << " ";
13         cout << endl;
14     }
15     FindPath(root->m_pLeft, path, sum, currentSum);
16     FindPath(root->m_pRight, path, sum, currentSum);
17     currentSum -= root->m_nValue;
18     path.pop_back();
19 }

转载于:https://www.cnblogs.com/xubin0523/archive/2012/04/23/2466246.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值