如果您存储每个顶点的前序号和后序号,并使用以下事实,则可以在O(n)预处理时间和O(n)空间中进行查询,并使用O(1)查询时间。
对于树T的两个给定节点x和y,当且仅当x在T的预遍历中出现在y之前且在后序遍历中出现在y之后时,x才是y的祖先。
(从此页面:http :
//www.cs.arizona.edu/xiss/numbering.htm)
在最坏的情况下,您所做的是Theta(d),其中d是较高节点的深度,所以不是O(1)。空间也不是O(n)。

如果您存储每个顶点的前序号和后序号,并使用以下事实,则可以在O(n)预处理时间和O(n)空间中进行查询,并使用O(1)查询时间。
对于树T的两个给定节点x和y,当且仅当x在T的预遍历中出现在y之前且在后序遍历中出现在y之后时,x才是y的祖先。
(从此页面:http :
//www.cs.arizona.edu/xiss/numbering.htm)
在最坏的情况下,您所做的是Theta(d),其中d是较高节点的深度,所以不是O(1)。空间也不是O(n)。