題目:輸入一棵樹的兩個節點,返回他們的最低公共祖先。
當這棵樹是二叉查詢樹時;
用遞迴從樹的根節點開始遍歷。
private treenode find(treenode node1, treenode node2, treenode root)
if(val如果這棵樹只是一顆普通的樹,但是擁有指向父節點的指標,
相當於求兩個鍊錶的第乙個公共節點。
private treenode find(treenode node1, treenode node2)
while(node2!=null)
if(a>b)
linkedlistpath1=new linkedlist<>();
collectnode(root,p1,path1);
linkedlistpath2=new linkedlist<>();
collectnode(root,p2,path2);
return getlastcommonnode(path1,path2);
}private static treenode getlastcommonnode(linkedlistpath1, linkedlistpath2)
}return last;
}private static boolean collectnode(treenode root, treenode node, linkedlistpath)
path.add(root);
for(treenode child:root.children)
}//該條路徑上沒找到節點node就要從路徑中移除
path.removelast();
return false;
}
樹中兩個節點的最低公共祖先
首先想一下 一.如果是搜尋二叉樹的話 可以採用遞迴的方式 思路 樹的根節點作為尋找的起點,把根節點作為當前節點 1.如果這兩個節點都大於當前節點,那麼這兩個節點的最低祖先肯定在當前節點節點的右子樹中,然後在當前節點的右子樹中找 2.如果兩個節點的都小於當前節點節點,那麼這兩個節點的最低祖先肯定在當前...
樹中兩個節點的最低公共祖先
假設是二叉搜尋樹 二叉搜尋樹是乙個排序的二叉樹,左子樹的結點小於根結點,右子樹的結點大於根結點 故找到乙個結點,使其大於左子結點小於右子結點即可。public static treenode getlastcommonnode treenode root,treenode p,treenode q ...
樹中兩個節點的最低公共祖先
1.二叉查詢樹 對於二叉搜尋樹,公共祖先的值一定大於等於較小的節點,小於等於較大的節點。換言之,在遍歷樹的時候,如果當前結點大於兩個節點,則結果在當前結點的左子樹里,如果當前結點小於兩個節點,則結果在當前節點的右子樹里。public treenode lowestcommonancestor tre...