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