课后题 数据结构 ds.05.02.02 解答题
第 29 题

已知一棵二叉树按顺序存储结构进行存储,设计一个算法,求编号分别为i和j的两个结点的最近公共祖先结点的值。

[tag_link]

参考答案

采用1基顺序存储,先验证i、j对应结点存在;反复将较大编号替换为floor(index/2),直到i=j,返回T[i]。

推导过程

顺序二叉树中结点的双亲编号为floor(k/2)。循环每次提升较深结点,编号相等时即为最近公共祖先;若任一位置为空则报告结点不存在。

评分要点

验证存在性;使用floor(k/2)逐级上移;处理根/相等/不存在边界。

易错点

混用0基父子公式,或只比较一次父结点。