您的位置:首页 > 其它

Find distance between two given keys of a Binary Tree

2015-01-05 21:46 351 查看
Find the distance between two keys in a binary tree, no parent pointers are given. Distance between two nodes is the minimum number of edges to be traversed to reach one node from other.





另外请参考:http://www.geeksforgeeks.org/find-distance-two-given-nodes/

#include <iostream>
using namespace std;

#define INF 1e9

struct Node {
int value;
Node *left, *right, *parent;
Node(int _value) {
value = _value;
left = NULL;
right = NULL;
}
};

int find_level(Node *node, int value, int level) {
if (!node) {
return INF;
}
if (node->value == value) {
return level;
}
return min(
find_level(node->left, value, level + 1),
find_level(node->right, value, level + 1)
);
}

Node *lca(Node *node, int n1, int n2) {
if (!node) {
return NULL;
}
if (node->value == n1 ||
node->value == n2) {
return node;
}

Node *left = lca(node->left, n1, n2);
Node *right = lca(node->right, n1, n2);

if (left && right) {
return node;
}
return left != NULL ? left : right;
}

int solve(Node *r, int n1, int n2) {
return find_level(r, n1, 0) + find_level(r, n2, 0) -
2 * find_level(r, lca(r, n1, n2)->value, 0);
}

int main() {
//    4
//  2   6
// 1 3 5 7
Node *r = new Node(4);
r->left = new Node(2);
r->right = new Node(6);
r->left->left = new Node(1);
r->left->right = new Node(3);
r->right->left = new Node(5);
r->right->right = new Node(7);
cout << solve(r, 1, 7) << endl;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐