0
我正在解決樹上的一些問題以爲科技採訪做準備。我偶然發現了一個問題,查看是否有例如一棵樹的價值與其他樹匹配
3 is part of 4
/\ -----------> /\
7 9 3 7
/\
8 9
一個樹(子)另一棵樹(主樹)的匹配值
的價值觀,我想出了以下的解決方案。
public static boolean isSubset(TreeNode<String> subNode, TreeNode<String> mainNode){
if(subNode == null)
return true;
if(mainNode == null)
return false;
if(subNode.data.equals(mainNode.data)){
return (isSubset(subNode.left,mainNode) && isSubset(subNode.right,mainNode));
}else{
return (isSubset(subNode,mainNode.left) || isSubset(subNode,mainNode.right));
}
}
但是這個解決方案只檢查節點是否與mainTree中的順序相同(根,左和右)。 我應該在上面的代碼中更改哪些內容,以便我可以檢查子樹中每個節點的主樹的每個節點的匹配情況?
完美。謝謝你,先生! – user3476229
雖然這確實有效,但它有點慢,因爲它沒有利用任何子集的樹結構。最好有一個'contains()'的版本,它返回包含'subNode.data'的節點,而不是'true'。假設你將這個節點分配給'x'。然後,您可以搜索'x.left'(而不是整個'mainNode')作爲'subNode.left',同樣也搜索'x.right'和'subNode.right'。 –
@j_random_hacker - 是的,這將是一個重大的改進。 –