数据结构:求最近的公共祖先结点的值 |
|
www.nanhushi.com 佚名 不详 |
【题目】已知一棵二叉树按顺序方式存储在数组 a[1..n]中。设计算法求出下标分别为 i 和 j 的两个结点的最近的公共祖先结点的值。
【解答】 #inlcude parent(int a[],int i,int j) {int k,m; m=k=0; if(i==1||j==1||a[i]==0||a[j]==0||i==j) // a[i]==0或a[j]==0表示不存在该结点 {printf('error./n');return;} while(i!=1&&j!=1){ if(ielse if(jelse if(j==i){i=j;break;} // i=j 表示找到共同祖先 } if(j==1||i==1)i=1; // i 或 j 有一个到了根结点 else if(m==0||k==0)i=i/2; // m、k 中有一个为 0 ,说明在查找过程中 i 或 j 有一个没移动 printf('the nearest common parent is a[%d]./n',i); }
【分析】本题思路是使 i 和 j 交替追赶,直到相等。
|
|
|
文章录入:杜斌 责任编辑:杜斌 |
|
上一篇文章: 线性表的定义特征与运算 下一篇文章: 数据库设计经验谈1:设计数据库之前 |
【字体:小 大】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】 |
|
|