對於這個問題不同的條件可以有不同的解法
binarytreenode *getlastcommonparent(binarytreenode *proot,binarytreenode *pnode1,binarytreenode *pnode2)
//普通二叉樹,沒有parent指標
//非遞迴的解法
//1.獲取結點所在的路徑,將路徑儲存在煉表裡
bool getnodepath(binarytreenode *proot, binarytreenode *pnode, list
&path)
//2. 尋找兩個鍊錶的公共節點
非遞迴解法:
//遞迴解法
bool findnode(binarytreenode *proot, binarytreenode *pnode)
binarytreenode *getcommonparent1(binarytreenode *proot,binarytreenode *pnode1,binarytreenode *pnode2)
return
null;
}
思路參考自劍指offer,解析摘自劍指offer. 劍指offer 樹中兩個節點的最低公共祖先
與 劍指offer 得到從根節點開始到輸入的兩個結點的兩條,需要遍歷兩次樹,每遍歷一次的時間複雜度是o n 得到的兩條路徑的長度在最差情況時是o n 通常情況下兩條路徑的長度是o logn include include include using namespace std struct tree...
劍指offer 樹中兩個節點的最低公共祖先
與 劍指offer 得到從根節點開始到輸入的兩個結點的兩條,需要遍歷兩次樹,每遍歷一次的時間複雜度是o n 得到的兩條路徑的長度在最差情況時是o n 通常情況下兩條路徑的長度是o logn include include include using namespace std struct tree...
《劍指offer》樹中兩個結點的最低公共祖先
說實話,和這題很有緣分。首先,這個題目給我印象很深,其次,今天在做蘑菇街實習生筆試時遇到了這個題目,所以感覺應該寫部落格,把這個題目記錄下來。筆試時遇到的題目是 給定二叉樹中的兩個結點,尋找最低公共節點。這是一種情況,是比較簡單的情況。這種情況就相當於求兩條鍊錶的公共節點。求解很簡單,先把遍歷把兩條...