算法----- 给定一颗二叉树,找到二叉树上任意两个节点之间的距离(Java版本)
程序员文章站
2024-03-15 12:19:29
...
题目:
给定一颗二叉树,找到二叉树上任意两个节点之间的距离
class TreeNode {
TreeNode left;
TreeNode right;
}
思路:
首先找到一个节点的路径,然后找到另一个节点的路径,针对这两个路径进行去重。把这两个路径的长度相加就可以得到结果。
解决方法:
class TreeNode {
TreeNode left;
TreeNode right;
}
int findDistance(TreeNode root, TreeNode p, TreeNode q){
if (p == q) {
return 0;
}
List<TreeNode> list1= findPath(root,p);
List<TreeNode> list2 = findPath(root,q);
// TreeNode lastSame = null;
int lastSame = 0;
for(int i = 0; i< list1.size();i++){
if(list1.get(i) == list2.get(i)){
lastSame = i;
}else{
break;
}
}
return list1.size() - lastSame + list2.size() - lastSame;
}
List<TreeNode> findPath(TreeNode root,TreeNode node){
List<TreeNode> list = new ArrayList<>();
if(root == null){
return list;
}
if(root == node){
list.add(root);
return list;
}
List<TreeNode> left = findPath(root,root.left);
List<TreeNode> right = findPath(root,root.right);
if(left.contains(node)){
list.addAll(left);
}else if(right.contains(node)){
list.addAll(right);
}
return list;
}
上一篇: 小程序跳转小程序之间传值和接收参数
下一篇: 输出乘法口诀表; 输出1到100的素数。