欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

树中任意两个节点之间的距离

程序员文章站 2022-03-13 12:06:18
...
树中任意两个节点之间的距离是指,从一个节点到另一个几点之间的一条路径。
如果路径上边的权值为1,其它权值为0,那么其实就是计算树的权值。
那么怎样该点是不是在这条路径中呢?
其实并不难,只要我们知道左子树和右子树的权值就可以判断了。
如果左子树和右子树的权值都为0,那么该节点肯定不在要查找的路径上。
否则该节点肯定在查找的路径上。如果左右子树权值都不为0,那么当前节点为公共父节点
,查找结束了,但是递归并不能停下来,所以要标示一下。


static boolean finished = false;

public static int findPath(Node root, Node first, Node second) {
int value = 0;
if (root == first || root == second) {
// find the node
value = 1;
} else if (root == null) {
return 0;
}
int leftvalue = findPath(root.left, first, second);
int rightvalue = findPath(root.right, first, second);
if (leftvalue * rightvalue != 0 || value * leftvalue != 0
|| value * rightvalue != 0) {
// find the common parent of the first and second node
finished = true;
return leftvalue + rightvalue;
} else if (leftvalue != 0 || rightvalue != 0 || value != 0) {
return finished ? leftvalue + rightvalue : leftvalue + rightvalue
+ 1;
}
//
return 0;
}

static class Node {
String value;
Node left;
Node right;
}