檢查兩個二叉搜索樹具有相同的有序遍歷。我的幼稚方法是按順序遍歷給定的兩棵樹並分別將每個元素複製到一個數組上,然後檢查這兩個數組是否相同。但我覺得我們應該能夠將一棵樹中的元素複製到一個數組中,並使用該數組來驗證另一棵樹,而不是使用兩個數組。或者更好的是,可能有辦法做到這一點,而不使用任何數組。我的代碼如下,不知道我的hasSameInOrder()的實現是否正確。或者我們可以做到這一點,而不使用任何數組? 請注意,如果在按順序遍歷時將元素複製到數組上,那麼具有相同遍歷遍歷的兩棵樹意味着兩個結果數組應具有相同的值。所以它們不一定具有相同的結構以便具有相同的順序遍歷。檢查兩個二叉搜索樹具有相同的有序遍歷
public boolean checkTwoBSTHaveSameInOrder(Node n1, Node n2) {
LinkedList<Node> queue = new LinkedList<Node>();
inOrder(n1, buffer);
hasSameInOrder(n2, queue)
return queue==null? false: true;
}
public void inOrder(Node node, LinkedList<Node> queue) {
if (node==null)
return;
inOrder(node.left, queue);
queue.add(node);
inOrder(node.right, queue);
}
public void hasSameInOrder(Node node, LinkedList<Node> queue) {
if (node==null)
return;
hasSameInOrder(n2.left, queue));
if (queue==null)
return;
else {
if (node!=queue.poll())
queue=null;
}
hasSameInOrder(n2.right, queue));
}
那麼它會和我使用鏈表的方法相同 – user3216886
比使用鏈表?那麼,使用鏈表與使用數組將會是我想的一樣。除非我們不使用任何緩衝區才能做到這一點。 – user3216886
我的意思是你「不能做得更好」 –