資料結構 c語言 二叉鍊錶樹 求兩個結點的共同路徑

2021-10-05 16:25:55 字數 1457 閱讀 5310

依然是上週的資料結構作業:

先說一下思路,要找兩個結點的共同路徑,就先分別求出兩個結點的路徑並儲存

然後通過對比各自的路徑找到共同路徑,這裡我感覺應該還可以拓展到多個結點

不過沒有什麼時間去 嘗試

下面是我的**:

這裡按照題目要求,使用了同時含有雙親和左右孩子的結構,事實證明,有了雙親結點的話,計算結點的層數和尋找它的路徑都變得十分簡單
#include

#include

#define elemtype int

typedef

struct bitnode

binode,

*bitree;

這裡銷毀樹和普通的二叉鍊錶樹是一樣的操作,

但是建立樹的時候多了乙個建立雙親結點的過程

int

createtree

(bitree* root,bitree p)

//種樹

*root=

(bitree)

malloc

(sizeof

(binode));

if(!root)

if(data>0)

return0;

}void

destroytree

(bitree root)

if(root->right)

}}

一開始想寫乙個,後來發現好像有點弄不過來,就分成了三個函式,

第乙個函式是用來計算這個結點所在的層數,這樣向記錄該節點路徑的陣列裡新增元素時就可以使其按照從根結點到該節點的順序而不是反序

ps或者可以不計算層數,另寫乙個函式用來把陣列順序重新排列感覺也可以

第二個函式用來提取這個結點的路徑,裡面直接呼叫了第乙個函式

第三個函式就是我們所要的函式,先分別呼叫第二個函式提取路徑,再進行對比獲得共同路徑。

int

layer

(bitree p)

return i;

}void

road

(int data[

],bitree p)

}void

sameroad

(int a[10]

,int b[10]

,bitree p,bitree q)

}

int

main()

C語言資料結構之求兩個集合的交集(鍊錶)

1 求兩集合的交集 鍊錶 include include struct node void push struct node head ref,int new data 新增資料元素宣告 bool ispresent struct node head,int data 判斷是否存在函式宣告 stru...

資料結構 二叉搜尋樹(C語言)

關於資料結構二叉樹的概念及操作可參看部落格 二叉搜尋樹又稱為二叉排序樹,它或者是一顆空樹,或者時具有以下性質的二叉樹 最難的部分還是要數二叉搜尋樹的刪除操作 binarysearchtree.h binarysearchtree.h pragma once include include inclu...

C語言 資料結構 二叉樹

一 樹的概念及結構 1.樹是一種非線性的資料結構,它是由n n 0 個有限結點組成乙個具有層次關係的集合。把它叫做樹是因為它看起來像一棵倒掛的樹,也就是說它是根朝上,而葉朝下的。它具有以下的特點 每個結點有零個或多個子結點 沒有父結點的結點稱為根結點 每乙個非根結點有且只有乙個父結點 除了根結點外,...