#include <iostream>
using namespace std;
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};
bool hasPathSum(TreeNode* node, int targetSum, string path, string direction) {
if (node == nullptr) return false;
path += to_string(node->val) + " ";
if (node->left == nullptr && node->right == nullptr && node->val == targetSum) {
cout << "Path: " << path << endl;
cout << "Direction: " << "root"+direction << endl;
return true;
}
bool leftPath = hasPathSum(node->left, targetSum - node->val, path, direction + "->left");
bool rightPath = hasPathSum(node->right, targetSum - node->val, path, direction + "->right");
return leftPath || rightPath;
}
int main() {
TreeNode* root = new TreeNode(10);
root->left = new TreeNode(8);
root->right = new TreeNode(2);
root->left->left = new TreeNode(3);
root->left->right = new TreeNode(5);
root->right->left = new TreeNode(2);
int sum = 21;
string path = "";
string direction = "";
if (hasPathSum(root, sum, path, direction)) {
cout << "There is a root to leaf path with sum " << sum << endl;
} else {
cout << "There is no root to leaf path with sum " << sum << endl;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IFRyZWVOb2RlIHsKICAgIGludCB2YWw7CiAgICBUcmVlTm9kZSogbGVmdDsKICAgIFRyZWVOb2RlKiByaWdodDsKICAgIFRyZWVOb2RlKGludCB4KSA6IHZhbCh4KSwgbGVmdChudWxscHRyKSwgcmlnaHQobnVsbHB0cikge30KfTsKCmJvb2wgaGFzUGF0aFN1bShUcmVlTm9kZSogbm9kZSwgaW50IHRhcmdldFN1bSwgc3RyaW5nIHBhdGgsIHN0cmluZyBkaXJlY3Rpb24pIHsKICAgIGlmIChub2RlID09IG51bGxwdHIpIHJldHVybiBmYWxzZTsKCiAgICBwYXRoICs9IHRvX3N0cmluZyhub2RlLT52YWwpICsgIiAiOwogICAgCiAgICBpZiAobm9kZS0+bGVmdCA9PSBudWxscHRyICYmIG5vZGUtPnJpZ2h0ID09IG51bGxwdHIgJiYgbm9kZS0+dmFsID09IHRhcmdldFN1bSkgewogICAgICAgIGNvdXQgPDwgIlBhdGg6ICIgPDwgcGF0aCA8PCBlbmRsOwogICAgICAgIGNvdXQgPDwgIkRpcmVjdGlvbjogIiA8PCAicm9vdCIrZGlyZWN0aW9uIDw8IGVuZGw7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgYm9vbCBsZWZ0UGF0aCA9IGhhc1BhdGhTdW0obm9kZS0+bGVmdCwgdGFyZ2V0U3VtIC0gbm9kZS0+dmFsLCBwYXRoLCBkaXJlY3Rpb24gKyAiLT5sZWZ0Iik7CiAgICBib29sIHJpZ2h0UGF0aCA9IGhhc1BhdGhTdW0obm9kZS0+cmlnaHQsIHRhcmdldFN1bSAtIG5vZGUtPnZhbCwgcGF0aCwgZGlyZWN0aW9uICsgIi0+cmlnaHQiKTsKCiAgICByZXR1cm4gbGVmdFBhdGggfHwgcmlnaHRQYXRoOwp9CgppbnQgbWFpbigpIHsKICAgIFRyZWVOb2RlKiByb290ID0gbmV3IFRyZWVOb2RlKDEwKTsKICAgIHJvb3QtPmxlZnQgPSBuZXcgVHJlZU5vZGUoOCk7CiAgICByb290LT5yaWdodCA9IG5ldyBUcmVlTm9kZSgyKTsKICAgIHJvb3QtPmxlZnQtPmxlZnQgPSBuZXcgVHJlZU5vZGUoMyk7CiAgICByb290LT5sZWZ0LT5yaWdodCA9IG5ldyBUcmVlTm9kZSg1KTsKICAgIHJvb3QtPnJpZ2h0LT5sZWZ0ID0gbmV3IFRyZWVOb2RlKDIpOwoKICAgIGludCBzdW0gPSAyMTsKICAgIHN0cmluZyBwYXRoID0gIiI7CiAgICBzdHJpbmcgZGlyZWN0aW9uID0gIiI7CiAgICAKICAgIGlmIChoYXNQYXRoU3VtKHJvb3QsIHN1bSwgcGF0aCwgZGlyZWN0aW9uKSkgewogICAgICAgIGNvdXQgPDwgIlRoZXJlIGlzIGEgcm9vdCB0byBsZWFmIHBhdGggd2l0aCBzdW0gIiA8PCBzdW0gPDwgZW5kbDsKICAgIH0gZWxzZSB7CiAgICAgICAgY291dCA8PCAiVGhlcmUgaXMgbm8gcm9vdCB0byBsZWFmIHBhdGggd2l0aCBzdW0gIiA8PCBzdW0gPDwgZW5kbDsKICAgIH0KCiAgICByZXR1cm4gMDsKfQ==