輸入若干行,每一行的第乙個輸入為家譜中的某個成員,該行接著輸入的資訊為每個孩子姓名,最後一行的輸入為要求查詢的兩個家譜成員的關係。
要求:根據輸入的家譜成員的資訊,建立二叉樹家譜關係圖,並輸出二位待查詢成員在家譜中的關係,包括輸出他們最近鄰的共同祖先以及在家譜中相差的層次數。
輸入樣例:
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.當輸入遇到非 但棧中元素小於...