Я написал это решение для поиска LCA двоичного дерева. Он дает ограничение по времени на больших входах. Может кто-то укажет на проблему в этом фрагменте кода. Эта проблема связана с Leetcode OJ.Самый низкий общий предк в двоичном дереве. Превышен лимит времени
public class Solution {
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
if(root == null){
return null;
}if((p.val == root.val) || (q.val == root.val)){
return root;
}
if(root.left == null && root.right == null){
return null;
}
boolean leftChildP = isLeftChild(root,p);
boolean leftChildQ = isLeftChild(root,q);
if(isRightChild(root,p) && isLeftChild(root,q)){
return root;
}if(isRightChild(root,q) && isLeftChild(root,p)){
return root;
}
if(leftChildP && leftChildQ){
return lowestCommonAncestor(root.left,p,q);
}
return lowestCommonAncestor(root.right,p,q);}
private boolean isLeftChild(TreeNode root, TreeNode node){
return isChild(root.left,node);
}
private boolean isRightChild(TreeNode root, TreeNode node){
return isChild(root.right,node);
}
private boolean isChild(TreeNode parent, TreeNode child){
if(parent == null){
return false;}
if(parent.val == child.val){
return true;
}return (isChild(parent.left,child) || isChild(parent.right,child));
}}
Я не думаю, что есть проблема с этим кодом, я просто думаю, что вы должны использовать другой алгоритм. Вы исследовали алгоритмы для этой проблемы? –