二叉樹家譜查詢特定世代

2021-08-10 17:42:28 字數 1146 閱讀 6240

此處的家譜結構為 左指標指向後代,右指標指向兄弟;

假設根節點儲存的名字為張一;

整個樹的結構如下:

那麼第一世代為張一;

第二為二、三

第三為四五六七八

第四為九十十一;

從根節點出發,到達第n世代需要訪問n-1次左結點,因此可用遞迴方式實現

void search_gener(node* root,int n) 

if (root->child !=

null) search_gener(root->child,n-

1); if (root->brother !=

null) search_gener(root->brother,n);

}

n即為所要查詢的世代,訪問右結點(brother)時n不變,而child則n-1,這樣總共訪問了n-1次左結點後便會輸出結果。

實際執行結果如下

對此函式稍加修改,還能達到查詢某個人的第幾代直系子女的效果;

例如我們如果要查詢張二的第二代子女,那麼輸出為張九,第一代子女則為四 五 六;

此時需要給函式再增加乙個引數count,因為我們不需要訪問張二的brother結點張三,否則會將張三的子女也加入輸出中。

**如下:

void search_gener(node* root,int n,int count) 

if (root->child !=

null) search_gener(root->child,n-

1,count+

1); if (root->brother !=

null

&& count !=

0) search_gener(root->brother,n,count);

}

這樣便不會訪問根節點的brother結點。

利用這個函式,還能完成遍歷整個家譜以及查詢某個人的所有後代的功能。

mysql 二叉樹統計 家譜familytree

家譜原始碼familytree php mysql 二叉樹左右值 一 已實現功能 原始碼無架構,目前有族譜樹 歐式族譜 塔式族譜三種樣式,其中族譜樹有詳情頁傳值單獨頁面 二 目前存在的問題需要優化 1 add.php只能實現新增使用者name欄位 id pid l r欄位為自動生成 無法實現新增欄位...

二叉樹 二叉查詢樹

構建二叉樹,判斷是否為二叉查詢樹,遞迴先序遍歷,非遞迴中序遍歷 include include include include using namespace std 二叉樹結點 struct treenode 鍊錶結點 struct listnode struct tempnodetempnode...

二叉樹 二叉查詢樹

二叉樹 binary tree 一種樹型結構,每個節點最多擁有兩個節點。如下圖 幾種型別的二叉樹 1.full binary tree 每個節點的孩子數 是 0 或者 2.對高度沒有要求。如下圖 2.perfect binary tree 這個就是最完美的樹,顧名思義,所有葉子節點都有相同的深度,並...