二叉树两节点的最短路径(Homework2 of Advanced Network)

来源:互联网 发布:怎样做淘宝客赚钱 编辑:程序博客网 时间:2024/05/18 03:09
问题:按层序从root节点开始给一个完全二叉树标号,对任意两个节点,求其最短路径。

描述:二叉树的最短路径问题可以转化为求两个节点最小公共父节点问题,而两节点到最小公共父节点的路径即为所求。

代码如下:


#include<iostream>using namespace std;int main(){    int A,B;        //两个节点     cout<<"Please Enter:"<<endl;     cin>>A>>B;    //输入两个节点    if(A > B)    {         A = A^B;         B = B^A;         A = A^B;          }        //确保A<B     int FA,FB;    //定义父节点     FA = A/2;    FB = B/2;        while(FA != FB)            //求A,B的最小父节点     {             if(FA <FB)FB = FB/2;             else                 FA = FA/2;             }    while(A >= FA)    //输出A到父节点路径     {            cout<<A<<"  ";            A = A/2;            }    int S[100];    int i = 0;    while(B >= FA)  //存入父节点到B路径     {            S[i] = B;            B = B/2;            i++;            }    for(i = i-1;i--;i>=0)cout<<S[i]<<"  ";   //输出父节点到B路径    return 0;        }