#include <iostream>
#include <vector>
using namespace std;
struct TreeNode {
int value;
TreeNode* left;
TreeNode* right;
};
TreeNode* createNode(int value) {
TreeNode* node = new TreeNode;
node -> value = value;
node -> left = NULL;
node -> right = NULL;
return node;
}
void FindPath(TreeNode* root, int sum, vector<int>& path, int& CurrentSum) {
if(root == NULL) return;
CurrentSum += root -> value;
path.push_back(root -> value);
bool isLeaf = root -> left == NULL && root -> right == NULL;
if(CurrentSum == sum && isLeaf) {
cout<<"A path is found: ";
vector<int>::iterator iter = path.begin();
for(; iter != path.end(); iter++) {
cout<<*iter<<ends;
}
cout<<endl;
}
if(root -> left) {
FindPath(root -> left, sum, path, CurrentSum);
}
if(root -> right) {
FindPath(root -> right, sum, path, CurrentSum);
}
CurrentSum -= root -> value;
path.pop_back();
}
void FindPath(TreeNode* root, int sum) {
if(root == NULL) return;
vector<int> path;
int CurrentSum = 0;
FindPath(root, sum, path, CurrentSum);
}
int main() {
int data;
cin>>data;
TreeNode* root = new TreeNode;
root -> value = 10;
root -> left = createNode(5);
root -> right = createNode(12);
root -> left -> left = createNode(4);
root -> left -> right = createNode(7);
FindPath(root, data);
}
二叉树中和为某一值的路径
最新推荐文章于 2021-07-23 08:40:15 发布