public class 二叉树任意两节点之间的路径 {
public static void main(String[] args) {
TreeNode node = new TreeNode(1);
TreeNode node1 = new TreeNode(2);
TreeNode node2 = new TreeNode(3);
TreeNode node3 = new TreeNode(4);
node.left = node1;
node.right = node2;
node1.left = null;
node1.right = node3;
node2.left = null;
node2.right = null;
node3.left = null;
node3.right = null;
System.out.println(findDistance(node, node1, node2));
}
public static int findDistance(TreeNode root,TreeNode node1,TreeNode node2) {
TreeNode LCA = lowestCommonAncestor(root,node1,node2);
return findLevel(LCA,node1,0) + findLevel(LCA,node2,0);
}
//两个节点之间的距离可以用层数来计算,不必要记录路径
public static int findLevel(TreeNode root,TreeNode node,int level) {
if(root == null) {
return Integer.MIN_VALUE;
}
if(root == node) {
return level;
}
int left = findLevel(root.left,node,level + 1);
//左子树里有可能找不到node节点
if(left != Integer.MIN_VALUE) {
return left;
}
return findLevel(root.right,node,level + 1);
}
public static TreeNode lowestCommonAncestor(TreeNode root,TreeNode node1,TreeNode node2) {
if(root == null || root == node1 || root == node2) {
return root;
}
TreeNode left = lowestCommonAncestor(root.left,node1,node2);
TreeNode right = lowestCommonAncestor(root.right,node1,node2);
if(left == null) {
return right;
}
if(right == null) {
return left;
}
return root;
}
static class TreeNode{
int val;
TreeNode left;
TreeNode right;
TreeNode() {}
TreeNode(int val){
this.val = val;
}
}
}
二叉树任意两节点之间的最短距离
最新推荐文章于 2022-09-19 11:42:06 发布