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

题目描述:

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

思路:

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

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

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

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

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

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

参考资料:

[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 }
posted @ 2012-04-23 12:26  可乐爱上了雪碧  阅读(712)  评论(0编辑  收藏  举报