已知一棵二叉树按顺序存储结构进行存储,设计一个算法,求编号分别为i和j的两个结点的最近公共祖先结点的值。
[tag_link]
参考答案
采用1基顺序存储,先验证i、j对应结点存在;反复将较大编号替换为floor(index/2),直到i=j,返回T[i]。
推导过程
顺序二叉树中结点的双亲编号为floor(k/2)。循环每次提升较深结点,编号相等时即为最近公共祖先;若任一位置为空则报告结点不存在。
评分要点
验证存在性;使用floor(k/2)逐级上移;处理根/相等/不存在边界。
易错点
混用0基父子公式,或只比较一次父结点。