尋找一棵樹任意兩個結點的公共父節點思路:
建立樹結點的結構: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中出現了類似的題目,但要求的思路都不太一樣,請參考 這裡介紹一種複雜度較低的遞迴實現。如題我們要找的二叉樹中兩個結點的最近公共結點,如果我們從上往下遞迴,按照深度優先搜尋的方式。如果當前結點為...