我的问题是:怎样在众多方法中选择最佳方法?与我直接朴素的方法相比,这种最佳方法有什么优劣势?
不仅针对这个问题,一般来说,如何找出任何问题的可能解决方案?
问题陈述:
给定二叉搜索树的根指针和两个值v1和v2。你需要返回二叉搜索树中v1和v2的最低公共祖先(LCA)。你只需要完成函数。
我的代码:
static Node lca(Node root,int v1,int v2)
{
Node r = root;
if( r == null){
return null;
}
else if(r.data == v1 || r.data == v2){
return r;
}
else if(r.data > v1 && r.data < v2){
return r;
}
else if(r.data > v2 && r.data < v1){
return r;
}
else if( r.data > v1 && r.data > v2){
lca(r.left, v1, v2);
}
else if( r.data < v1 && r.data < v2){
lca(r.right, v1, v2);
}
return null;
}
问题链接: https://www.hackerrank.com/challenges/binary-search-tree-lowest-common-ancestor
这道题目要求我们找到二叉搜索树中两个节点的最近公共祖先。为了解决这个问题,我们可以通过递归遍历二叉搜索树来寻找最近公共祖先。具体实现时,我们可以分别判断当前节点是否大于或小于两个给定节点,以此决定向左子树或右子树递归查找。如果当前节点既不大于也不小于两个节点,则说明当前节点就是它们的最近公共祖先。
lca(r.left...)
和lca(r.right...)
缺少两个return
之外,解决方案似乎是正确的。正如您所正确识别的那样,LCA将是大于v1
但小于v2
(或反之亦然)的数字。 - biziclop