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

2021-09-26 06:31:00 字數 896 閱讀 8970

題目:輸入一棵樹的兩個節點,返回他們的最低公共祖先。

當這棵樹是二叉查詢樹時;

用遞迴從樹的根節點開始遍歷。

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...