"""# Definition for a Node.class Node: def __init__(self, val): self.val = val self.left = None self.right = None self.parent = None"""classSolution:deflowestCommonAncestor(self,p:"Node",q:"Node")->"Node":vis=set()node=pwhilenode:vis.add(node)node=node.parentnode=qwhilenodenotinvis:node=node.parentreturnnode
1 2 3 4 5 6 7 8 91011121314151617181920212223
/*// Definition for a Node.class Node { public int val; public Node left; public Node right; public Node parent;};*/classSolution{publicNodelowestCommonAncestor(Nodep,Nodeq){Set<Node>vis=newHashSet<>();for(Nodenode=p;node!=null;node=node.parent){vis.add(node);}for(Nodenode=q;;node=node.parent){if(!vis.add(node)){returnnode;}}}}
1 2 3 4 5 6 7 8 910111213141516171819202122232425
/*// Definition for a Node.class Node {public: int val; Node* left; Node* right; Node* parent;};*/classSolution{public:Node*lowestCommonAncestor(Node*p,Node*q){unordered_set<Node*>vis;for(Node*node=p;node;node=node->parent){vis.insert(node);}for(Node*node=q;;node=node->parent){if(vis.count(node)){returnnode;}}}};
1 2 3 4 5 6 7 8 9101112131415161718192021
/** * Definition for Node. * type Node struct { * Val int * Left *Node * Right *Node * Parent *Node * } */funclowestCommonAncestor(p*Node,q*Node)*Node{vis:=map[*Node]bool{}fornode:=p;node!=nil;node=node.Parent{vis[node]=true}fornode:=q;;node=node.Parent{ifvis[node]{returnnode}}}
"""# Definition for a Node.class Node: def __init__(self, val): self.val = val self.left = None self.right = None self.parent = None"""classSolution:deflowestCommonAncestor(self,p:'Node',q:'Node')->'Node':a,b=p,qwhilea!=b:a=a.parentifa.parentelseqb=b.parentifb.parentelsepreturna
1 2 3 4 5 6 7 8 91011121314151617181920
/*// Definition for a Node.class Node { public int val; public Node left; public Node right; public Node parent;};*/classSolution{publicNodelowestCommonAncestor(Nodep,Nodeq){Nodea=p,b=q;while(a!=b){a=a.parent==null?q:a.parent;b=b.parent==null?p:b.parent;}returna;}}
1 2 3 4 5 6 7 8 91011121314151617181920212223
/*// Definition for a Node.class Node {public: int val; Node* left; Node* right; Node* parent;};*/classSolution{public:Node*lowestCommonAncestor(Node*p,Node*q){Node*a=p;Node*b=q;while(a!=b){a=a->parent?a->parent:q;b=b->parent?b->parent:p;}returna;}};
/** * Definition for Node. * type Node struct { * Val int * Left *Node * Right *Node * Parent *Node * } */funclowestCommonAncestor(p*Node,q*Node)*Node{a,b:=p,qfora!=b{ifa.Parent!=nil{a=a.Parent}else{a=q}ifb.Parent!=nil{b=b.Parent}else{b=p}}returna}