二叉樹的建立 查詢最鄰近的共同祖先(201703)

2021-10-05 06:20:34 字數 1443 閱讀 6122

輸入若干行,每一行的第乙個輸入為家譜中的某個成員,該行接著輸入的資訊為每個孩子姓名,最後一行的輸入為要求查詢的兩個家譜成員的關係。

要求:根據輸入的家譜成員的資訊,建立二叉樹家譜關係圖,並輸出二位待查詢成員在家譜中的關係,包括輸出他們最近鄰的共同祖先以及在家譜中相差的層次數。

輸入樣例:

ye shu ba

shu ge mei1

ba self mei2

ge son1 son2

son2 mei1

輸出樣例:

shu 1

#include

#include

#include

const

int maxn=

100;

typedef

struct nodenode;

inttest

(char s)

return i;

}void

addnode

(char s[

],node nodes,

int number)

temp=

strtok

(null

," ");

if(temp==

null

)break

;strcpy

(nodes[number]

.name,temp)

;//father是乙個指標,指向的是父節點的位址。

nodes[number]

.father=

&nodes[number/2]

;//找到父節點,根據父節點的深度,求當前節點的深度

nodes[number]

.level=nodes[number]

.father-

>level+1;

number++;}

}void

findrelationship

(char s[

],node nodes,

int number)

}for

(k=1

;kif(find==2)

else

//在同一級進行查詢共同的父節點

while

(strcmp

(nodes[find1]

.father-

>name,nodes[find2]

.father-

>name)!=0

)printf

("%s %d\n"

,nodes[find1]

.father-

>name,

abs(diff));

}}intmain()

//兩個人找關係

else

}return0;

}

二叉樹建立不跳出 236 二叉樹的最近公共祖先

面試題68 ii.二叉樹的最近公共祖先 給定乙個二叉樹,找到該樹中兩個指定節點的最近公共祖先。例如,給定如下二叉樹 root 3,5,1,6,2,0,8,null,null,7,4 輸入 root 3,5,1,6,2,0,8,null,null,7,4 p 5,q 1 輸出 3 解釋 節點 5 和節...

二叉樹 二叉樹的查詢

三種查詢方式 前序查詢 中序查詢 後序查詢。前序查詢 比較當前節點,如果是,返回查詢結果。如果不是就向左遞迴查詢,如果左邊沒有就向右邊遞迴查詢。設定no 5,針對該題,前序遍歷共4次。中序遍歷 先向左遞迴查詢,如果左子樹沒有,再比較當前節點,如果仍然不是則向右遍歷查詢。後序遍歷 先向左遞迴查詢,如果...

建立二叉樹 後序建立二叉樹

由後序遍歷可知,輸入順序是左結點 右結點 子樹根結點 比如輸入如下樹 ab cde 輸入序列為 e d b c a 思路 使用棧,對左結點和右結點進行壓棧 1.當輸入遇到非 且棧中元素大於等於2,則可以確定乙個小三角樹形,並將這個樹根作為下乙個小三角樹形的乙個子節點 2.當輸入遇到非 但棧中元素小於...