| 1234567891011121314151617181920212223242526272829303132333435363738 |
- #include "tree.c"
- TreeNode* findLCA(TreeNode* root, int node1, int node2) {
- if (root == NULL || root->val == node1 || root->val == node2) {
- return root;
- }
- TreeNode* left = findLCA(root->left, node1, node2);
- TreeNode* right = findLCA(root->right, node1, node2);
- if (left != NULL && right != NULL) {
- return root;
- }
- return (left != NULL) ? left : right;
- }
- int findLevel(TreeNode* root, int val, int level) {
- if (root == NULL) return -1;
- if (root->val == val) return level;
- int left = findLevel(root->left, val, level + 1);
- if (left != -1) return left;
- return findLevel(root->right, val, level + 1);
- }
- int nodeDistance(TreeNode *root, int node1, int node2) {
- TreeNode* lca = findLCA(root, node1, node2);
- if (lca == NULL) return -1;
- int d1 = findLevel(lca, node1, 0);
- int d2 = findLevel(lca, node2, 0);
- if (d1 == -1 || d2 == -1) return -1;
- return d1 + d2;
- }
|