题目:输入一颗二叉树和一个整数,打印出二叉树中结点值得和为输入整数的所有路径。从树的根节点开始往下一直到叶节点所经过的结点形成一条路径。
#include <iostream>
#include <vector>
using namespace std;
struct BinaryTreeNode {
int m_nValue;
BinaryTreeNode *m_pLeft;
BinaryTreeNode *m_pRight;
};
BinaryTreeNode *CreateTree() {
int a;
cin >> a;
if (a != -1) {
BinaryTreeNode *root = new BinaryTreeNode;
root->m_nValue = a;
cout << "请输入" << a << "的左结点:";
root->m_pLeft = CreateTree();
cout << "请输入" << a << "的右结点:";
root->m_pRight = CreateTree();
return root;
}
return NULL;
}
void FindPath(BinaryTreeNode *pRoot, int expectedSum, vector<int> &path,
int currentSum) {
currentSum += pRoot->m_nValue;
path.push_back(pRoot->m_nValue);
if (pRoot->m_pLeft == NULL && pRoot->m_pRight == NULL &&
currentSum == expectedSum) {
cout << "A path is found:";
for (vector<int>::iterator iter = path.begin(); iter != path.end(); ++iter)
cout << *iter << " ";
cout << endl;
}
if (pRoot->m_pLeft != NULL)
FindPath(pRoot->m_pLeft, expectedSum, path, currentSum);
if (pRoot->m_pRight != NULL)
FindPath(pRoot->m_pRight, expectedSum, path, currentSum);
path.pop_back();
}
void FindPath(BinaryTreeNode *pRoot, int expectedSum) {
if (pRoot == NULL)
return;
vector<int> path;
int currentSum = 0;
FindPath(pRoot, expectedSum, path, currentSum);
}
int main() {
BinaryTreeNode *root = CreateTree();
FindPath(root, 22);
return 0;
}