
About the author
Mallikarjuna Mallisetty
General programming
Mallikarjuna shares practical programming tutorials and foundational concepts designed to help developers learn by building and experimenting.
View LinkedIn profile ↗#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
typedef struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
TreeNode* kthAncestor = NULL;
bool findHelper(TreeNode* root, int target, int* k) {
if (root == NULL) return false;
if (root->val == target) return true;
if (findHelper(root->left, target, k) || findHelper(root->right, target, k)) {
(*k)--;
if (*k == 0) {
kthAncestor = root;
}
return true;
}
return false;
}
TreeNode* findKthAncestor(TreeNode* root, int target, int k) {
kthAncestor = NULL;
findHelper(root, target, &k);
return kthAncestor;
}
TreeNode* newNode(int val) {
TreeNode* node = (TreeNode*)malloc(sizeof(TreeNode));
node->val = val;
node->left = node->right = NULL;
return node;
}
int main() {
TreeNode* root = newNode(1);
root->left = newNode(2);
root->right = newNode(3);
root->left->left = newNode(4);
root->left->right = newNode(5);
TreeNode* ancestor = findKthAncestor(root, 5, 2);
if (ancestor)
printf("The kth ancestor is: %d\n", ancestor->val);
else
printf("No kth ancestor found.\n");
return 0;
}