1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 | #include <stdio.h> #include <stdlib.h> #include <stdbool.h> #include <malloc.h> typedef struct treeNode* treeNodePtr; struct treeNode{ int data; treeNodePtr left; treeNodePtr right; }; treeNodePtr newNode(int data) { treeNodePtr newNode = malloc(sizeof(struct treeNode)); if(!newNode) { fprintf(stderr,"Error allocating memory\n"); exit(1); } newNode->data = data; newNode->left = NULL; newNode->right = NULL; return newNode; } bool hasPathSum(treeNodePtr node, int sum) { // CASE 1: empty tree. if (node == NULL) { return sum == 0; } // CASE 2: Tree exits. int subSum = sum - node->data; // CASE 2A: Function is called on a leaf node. if (node->left==NULL && node->right==NULL) { return subSum == 0; // CASE 2B: Function is called on a non-leaf node. } else { // CASE 2BA: Non-left node has desired path in left subtree. if (node->left != NULL && hasPathSum(node->left, subSum) ){ return true; } // CASE 2BB: Non-left node has desired path in right subtree. if ( node->right != NULL && hasPathSum(node->right, subSum) ) { return true; } // CASE 2BC: Non-left node has no desired pat. return false; } } int main() { /* 5 / \ 2 1 / 3 */ treeNodePtr root = newNode(5); root->left = newNode(2); root->right = newNode(1); root->left->left = newNode(3); int tests[] = {1,2,3,5,6,7,8,10}; int size = sizeof(tests)/sizeof(*tests); int i; for(i=0;i<size;i++) { if(hasPathSum(root,tests[i])) { printf("Root to leaf path of sum %d exits\n",tests[i]); } } return 0; } |
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHN0ZGJvb2wuaD4KI2luY2x1ZGUgPG1hbGxvYy5oPgoKdHlwZWRlZiBzdHJ1Y3QgdHJlZU5vZGUqIHRyZWVOb2RlUHRyOwpzdHJ1Y3QgdHJlZU5vZGV7CglpbnQgZGF0YTsKCXRyZWVOb2RlUHRyIGxlZnQ7Cgl0cmVlTm9kZVB0ciByaWdodDsKfTsKCnRyZWVOb2RlUHRyIG5ld05vZGUoaW50IGRhdGEpIHsKCXRyZWVOb2RlUHRyIG5ld05vZGUgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCB0cmVlTm9kZSkpOwoJaWYoIW5ld05vZGUpIHsKCQlmcHJpbnRmKHN0ZGVyciwiRXJyb3IgYWxsb2NhdGluZyBtZW1vcnlcbiIpOwoJCWV4aXQoMSk7Cgl9CgluZXdOb2RlLT5kYXRhID0gZGF0YTsKCW5ld05vZGUtPmxlZnQgPSBOVUxMOwoJbmV3Tm9kZS0+cmlnaHQgPSBOVUxMOwoKCXJldHVybiBuZXdOb2RlOwp9Cgpib29sIGhhc1BhdGhTdW0odHJlZU5vZGVQdHIgbm9kZSwgaW50IHN1bSkgewoJLy8gQ0FTRSAxOiBlbXB0eSB0cmVlLgoJaWYgKG5vZGUgPT0gTlVMTCkgewoJCXJldHVybiBzdW0gPT0gMDsKCX0KCgkvLyBDQVNFIDI6IFRyZWUgZXhpdHMuCglpbnQgc3ViU3VtID0gc3VtIC0gbm9kZS0+ZGF0YTsKCS8vIENBU0UgMkE6IEZ1bmN0aW9uIGlzIGNhbGxlZCBvbiBhIGxlYWYgbm9kZS4KCWlmIChub2RlLT5sZWZ0PT1OVUxMICYmIG5vZGUtPnJpZ2h0PT1OVUxMKSB7CgkJcmV0dXJuIHN1YlN1bSA9PSAwOwoJCS8vIENBU0UgMkI6IEZ1bmN0aW9uIGlzIGNhbGxlZCBvbiBhIG5vbi1sZWFmIG5vZGUuCgl9IGVsc2UgewoJCS8vIENBU0UgMkJBOiBOb24tbGVmdCBub2RlIGhhcyBkZXNpcmVkIHBhdGggaW4gbGVmdCBzdWJ0cmVlLgoJCWlmIChub2RlLT5sZWZ0ICE9IE5VTEwgJiYgaGFzUGF0aFN1bShub2RlLT5sZWZ0LCBzdWJTdW0pICl7CgkJCXJldHVybiB0cnVlOwoJCX0KCQkvLyBDQVNFIDJCQjogTm9uLWxlZnQgbm9kZSBoYXMgZGVzaXJlZCBwYXRoIGluIHJpZ2h0IHN1YnRyZWUuCgkJaWYgKCBub2RlLT5yaWdodCAhPSBOVUxMICYmIGhhc1BhdGhTdW0obm9kZS0+cmlnaHQsIHN1YlN1bSkgKSB7CgkJCXJldHVybiB0cnVlOwoJCX0KCQkvLyBDQVNFIDJCQzogTm9uLWxlZnQgbm9kZSBoYXMgbm8gZGVzaXJlZCBwYXQuCgkJcmV0dXJuIGZhbHNlOwoJfQp9CgppbnQgbWFpbigpIHsKCi8qCgkgICA1CiAgICAgICAgICAvIFwKCSAyICAgMQoJLyAgICAKICAgICAgIDMKKi8KCgl0cmVlTm9kZVB0ciByb290ID0gbmV3Tm9kZSg1KTsKCXJvb3QtPmxlZnQgICAgICAgPSBuZXdOb2RlKDIpOwoJcm9vdC0+cmlnaHQgICAgICA9IG5ld05vZGUoMSk7Cglyb290LT5sZWZ0LT5sZWZ0ID0gbmV3Tm9kZSgzKTsKCglpbnQgdGVzdHNbXSA9IHsxLDIsMyw1LDYsNyw4LDEwfTsKCWludCBzaXplID0gc2l6ZW9mKHRlc3RzKS9zaXplb2YoKnRlc3RzKTsKCWludCBpOwoKCWZvcihpPTA7aTxzaXplO2krKykgewoJCWlmKGhhc1BhdGhTdW0ocm9vdCx0ZXN0c1tpXSkpIHsKCQkJcHJpbnRmKCJSb290IHRvIGxlYWYgcGF0aCBvZiBzdW0gJWQgZXhpdHNcbiIsdGVzdHNbaV0pOwoJCX0KCX0KCglyZXR1cm4gMDsKfQo=
-
upload with new input
-
result: Success time: 0s memory: 1852 kB returned value: 0
Root to leaf path of sum 6 exits Root to leaf path of sum 10 exits


