前言
声明:因个人能力有限,本文仅是个人的学习记录笔记,有错误之处还望指出数据结构每日一题
题目
给定一个二叉树按顺序存储,要求设计一个算法实现寻找结点 i 和 j 的最近祖先节点
相关知识
- 二叉树的顺序存储(完全二叉树和满二叉树用此方式比较多,而在普通二叉树的情况下会将其补充数据伪装成一个满二叉树来存储,方便使用满二叉树的特性)
- 为了维持二叉树的节点顺序和数组顺序一致可以从1开始存储
- 祖先节点是子节点的 1/2
思想
- 要注意判断结点的值信息
- 不断的将较大的结点值取一半,知道 i 和 j 相等
Elemtype ComAncestor(sqtree T,int i,int j){
//判断节点的位置合理性
if(T[i] != NULL && T[j] != NULL){
while( i!=j){
if(i>j)
i=i/2; //i大i取一半
else
j=j/2; //j大j取一半
}
}
return i;
}