求一棵普通樹的兩個結點的最低公共祖先

2022-07-24 08:36:11 字數 1353 閱讀 6251

一棵普通樹,樹中的結點沒有指向父節點的指標,求一棵普通樹的兩個結點的最低公共祖先。

**如下,我太懶沒有加注釋,大家自己看吧!

1 #include 2 #include 3 #include 4

using

namespace

std;56

struct treenode //節點7

;1112 treenode* constructtree(treenode** pnode1 , treenode**pnode2)

1350

5152

53bool getnodepath(treenode* proot , treenode* pnode , list&path)

5459

bool find = false;60

path.push_back(proot);

61 vector::iterator it = proot->m_vchildren.begin();

62while (!find && it != proot->m_vchildren.end())

6367

if (!find)

6871

return

find;72}

7374 treenode* getlastcommonnode(list& path1 , list&path2 )

7580 list::const_iterator it1 =path1.begin();

81 list::const_iterator it2 =path2.begin();

82 treenode* temp =null ;

83while ( it1 != path1.end() && it2 != path2.end() && (*it1 == *it2))

8489

90return

temp;91}

9293 treenode* getlastcommonparent(treenode* proot, treenode* pnode1, treenode*pnode2)

9499 listpath1 ;

100getnodepath(proot, pnode1, path1);

101102 listpath2 ;

103getnodepath(proot, pnode2, path2);

104105

return

getlastcommonnode(path1, path2);

106}

107108

109110

intmain()

111

求一棵樹兩個點的最遠距離

原題 1361 樹的最遠距離 題意 給一棵樹,求兩個點這間的距離的最大值 解析 想了很久,發現兩個點a,b也就只有幾種情況 a為b的父結點 a與b屬於同一父結點的兩條不同分支 看到題目,很多人當然會想到離root最遠的那個結點。我們現在就利用這個結點來設計演算法。證明 最遠路一點以最遠結點為端點 如...

樹中兩個結點的最低公共祖先

題目 輸入兩個樹結點,求它們的最低公共祖先 題目一 如果這個樹是二叉搜尋樹,二叉搜尋樹是排序過的,位於左子樹的結點都比父結點小,而位於右子樹的結點都比父結點大,我們只需要從樹的根結點開始和兩個輸入的結點比較,如果輸入兩個結點都比根結點小,那麼最低的共同父結點一定在當前結點的左子樹中,於是下一步遍歷當...

樹中兩個結點的最低公共祖先

在進行這個問題之前,我們需要考慮以下幾個問題 1 題目告訴我們是樹,但是沒有告訴我們是一棵怎樣的樹。這裡的樹可以分為三種結構。第一種 普通的二叉樹 第二種 結點中含有指向父親結點的指標 第三種 二叉搜尋樹。2 對於不同結構的樹,處理的方式是不一樣的,時間複雜度也是不一樣的,我們需要針對每種結構設計解...