劍指offer 樹中兩個節點的最低公共祖先

2022-08-12 02:51:14 字數 932 閱讀 4690

****與《劍指offer》

得到從根節點開始到輸入的兩個結點的兩條,需要遍歷兩次樹,每遍歷一次的時間複雜度是o(n),得到的兩條路徑的長度在最差情況時是o(n),通常情況下兩條路徑的長度是o(logn)。

#include #include 

#include

using

namespace

std;

struct

treenode

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

path.push_back(proot);

bool found=false

; vector

::iterator i=proot->m_vchildren.begin();

while(!found&&im_vchildren.end())

if (!found)

return

found;

}treenode* getlastcommonnode(const list& path1, const list&path2)

i1++;

i2++;

}return

plast;

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

list

path1;

getnodepath(proot,pnode1,path1);

list

path2;

getnodepath(proot,pnode2,path2);

return

getlastcommonnode(path1,path2);

}

劍指offer 樹中兩個節點的最低公共祖先

與 劍指offer 得到從根節點開始到輸入的兩個結點的兩條,需要遍歷兩次樹,每遍歷一次的時間複雜度是o n 得到的兩條路徑的長度在最差情況時是o n 通常情況下兩條路徑的長度是o logn include include include using namespace std struct tree...

劍指offer 樹中兩個節點的最低公共祖先

對於這個問題不同的條件可以有不同的解法 binarytreenode getlastcommonparent binarytreenode proot,binarytreenode pnode1,binarytreenode pnode2 普通二叉樹,沒有parent指標 非遞迴的解法 1.獲取結點...

《劍指offer》樹中兩個結點的最低公共祖先

說實話,和這題很有緣分。首先,這個題目給我印象很深,其次,今天在做蘑菇街實習生筆試時遇到了這個題目,所以感覺應該寫部落格,把這個題目記錄下來。筆試時遇到的題目是 給定二叉樹中的兩個結點,尋找最低公共節點。這是一種情況,是比較簡單的情況。這種情況就相當於求兩條鍊錶的公共節點。求解很簡單,先把遍歷把兩條...