資料結構 尋找最近公共父結點

2021-08-17 02:18:23 字數 826 閱讀 5377

尋找一棵樹任意兩個結點的公共父節點思路:

建立樹結點的結構:1、資料 2、其父節點所在位置

建立容納整棵樹的結構:1、樹的所有結點 2、結點數

建立樹:通過迴圈,給整棵樹每個結點賦值,並記錄其父節點所在位置

尋找公共結點:通過迴圈找到包含所要尋找的資料的兩個結點,用兩個陣列分別記錄下他們的父節點,並以此向上,直到記錄到根結點。

雖然比較兩個陣列,當兩個陣列中所記錄的父節點位置第一次相同時,則為最近公共父節點。

#include #include #define maxsize 100

typedef struct _btnode

btnode;

typedef struct _bttree

bttree;

bttree createtree();

char commonfather(bttree,char,char);

int main()

bttree createtree()

return newtree;

}char commonfather(bttree atree,char c1,char c2)

if(atree.node[i].data==c2)

}int j=0;

int d=0;

while(k!=-1) //當父親結點不是根結點時,迴圈

a[j]=-1; //最後乙個結點為根結點

while(m!=-1)

b[d]=-1;

for(p=0;p<=j;p++)}}

}

資料結構 最近公共祖先 LCA

這次我是用樹剖寫的lca,寫的比倍增簡單而且還快一點。樹剖一般指的是重鏈剖分,首先把所有節點的子節點中最大的標出來,稱為重子節點,從節點到重子節點的邊叫重邊,一段連續的重邊稱為重鏈,其他的輕子節點叫輕鏈,然後把整棵樹dfs一下,dfs的時候優先dfs重兒子,這樣可以保證同一條重鏈上的點時間戳連續。這...

樹 順序結構 兩結點最近的公共結點

順序儲存樹結構 從上往下,從左往右儲存二叉樹 求結點i和結點j最近的公共祖先結點的值 說明 樹中元素型別是整型,樹是完全二叉樹 主要函式源自王道資料結構 include include using namespace std const int maxsize 100 typedef int ele...

(演算法)二叉樹中兩個結點的最近公共父結點

二叉樹中兩個結點的最近公共父結點 二叉樹結點的定義如下 struct treenode 前面在劍指offer中出現了類似的題目,但要求的思路都不太一樣,請參考 這裡介紹一種複雜度較低的遞迴實現。如題我們要找的二叉樹中兩個結點的最近公共結點,如果我們從上往下遞迴,按照深度優先搜尋的方式。如果當前結點為...