二叉树的最低公共祖先(Lowest Common Ancestor)算法用于找到给定二叉树中两个节点的最低共同祖先节点。
算法步骤如下:
- 从根节点开始,递归搜索树来寻找节点p和q。
- 如果当前节点为NULL或等于p或等于q,返回当前节点。
- 递归查找左子树和右子树。如果左子树和右子树均找到p和q节点,则当前节点为最低公共祖先。
- 如果只在左子树或右子树中找到p和q节点,则返回在哪个子树中找到的节点。
- 如果都没有找到,则返回NULL。
二叉树的最低公共祖先算法的优点是其时间复杂度为O(n),其中n为二叉树中的节点数。算法效率高,适用于解决大规模二叉树中节点的最低公共祖先问题。
然而,该算法的缺点是需要额外的存储空间来保存递归栈,因此占用的空间较大。此外,如果二叉树是非平衡的,最坏情况下该算法的时间复杂度可以达到O(n^2)。
以下是使用C语言实现二叉树的最低公共祖先算法的示例代码:
#include <stdio.h></