天天看點

王道課後習題4.2.5:順序存儲結構的二叉樹尋找編号分别為i和j的兩個結點的最近的公共祖先結點的值

題目描述:

已知一棵二叉樹按順序存儲結構進行存儲,設計一個算法,求編号分别為i和j的兩個結點的最近的公共祖先結點的值

算法思想:

從1開始編号。

核心代碼:

#include <stdio.h>
#include <malloc.h>
#define MaxSize 13

typedef struct TNode
{
    char data;
    TNode* lchild;
    TNode* rchild;
}TNode;

int find_public(TNode T[],int i,int j)//注意這裡不是TNode* &T
{
    if(T[i].data!='#'&&T[j].data!='#')//還要判斷結點是否存在
    {
        while(i!=j)
        {
            if(i>j)
                i=i/2;
            else
                j=j/2;
        }
        return i;
    }
    else
        return 0;

}

int main()
{
    TNode T[MaxSize];
    for(int i=1;i<MaxSize;i++)//從數組下标1開始存儲
    {
        char c;
        scanf("%c",&c);
        T[i].data=c;
    }
    int k=find_public(T,4,10);
    printf("%c",T[k].data);//測試資料:ABCDE####F#,輸出data:B
    return 0;
}

           

繼續閱讀