所以在给定的二叉树(节点二进制搜索树)中,最初我想找到两个节点之间的节点数" p"和" q"。我首先找到这两个节点之间的最低共同祖先,例如"祖先"。然后我计算"祖先"之间的节点数量。和" p"和#34; ancestor"之间的节点数量和" q"分开并最后添加它们。
我尝试以递归的方式获得"祖先"之间的节点数量。和" p"或" q"但失败了。不是递归的粉丝。
public static int NodeToNodePath(BinaryTree root, BinaryTree node, int length){
if(root == null && node == null)
return 0;
if(root == null || node == null)
return 0;
if(root.rootElement == node.rootElement){
return length;
}
int sum = NodeToNodePath(root.left, node, length + 1);
if(sum != 0)
return sum;
sum = NodeToNodePath(root.right, node, sum);
return sum;
}
但是通过这种方式,从根到左模式的结果是正确的,但无法在其他尺寸上找到节点。
任何帮助?
谢谢!
答案 0 :(得分:0)
我弄清楚如何解决问题。通过递归。这可能不适用于我的原产地问题 “在两个给定节点之间找到节点号”但它确实返回了根与给定节点之间的节点数。
代码发布在下面。 public static int NodeToNodePath(BinaryTree root, BinaryTree节点,int length){ if(root == null) 返回0;
if(root.rootElement == node.rootElement){
length += 1;
return length;
}
int left = NodeToNodePath(root.left, node, length);
if(left != 0){
return left + 1;
}
int right = NodeToNodePath(root.right, node, length);
if(right != 0){
return right + 1;
}
return 0;
}
另外,我在GeekForGeeks上发现了一篇专门讨论我的原始问题的帖子,它被称为“查找二叉树的两个给定键之间的距离”,地址是: http://www.geeksforgeeks.org/find-distance-two-given-nodes/
谢谢大家!