求二叉树中和为某一值的路径
题目描述:
输入一个二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。
思路:
从根节点开始,把路径存起来,遇到和输入的整数相同,就把路径打印出来,这是
一种前序遍历,因为你必须先访问根节点。这里有两点:一如果题目不需要是到叶
节点的路径,那么只要判读和是否相等。如果要求要到叶节点的路径,那么再判断
下是否是叶节点就行了;二是,我的这个路径和和存数据的数据结构是否需要引用,
如果是引用,那么就要回溯,如果没有引用,相当于,你每次传递的都是一个值的
拷贝,就不需要回溯了。当然建议回溯啦,这样不会浪费栈空间。
参考资料:
[1] 《剑指offer》 何海涛 P143
代码:
View Code
1 //二叉树中和为某一值的路径 2 void FindPath(BinaryTreeNode * root, vector<int> &path, int sum, int ¤tSum) 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 }