您的位置:首页 > 其它

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

2012-04-23 12:26 218 查看
题目描述:

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

思路:

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

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

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

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

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

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

参考资料:

[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();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: