我似乎在構建寬度優先樹時遇到問題。寬度優先樹
在下面的代碼中,我有一個節點通過另一個類中的循環插入。
樹的結構應該是像這樣:
A
/\
B C
/\ /\
D E F G
現在的代碼:左側
我的代碼結構正確,而右側增加了左側以及。我知道這種情況發生在代碼中,但是有沒有辦法阻止這種情況發生?
public Node familyTree;
public void breadthFirst(Node newNode){
familyTree = breadthFirst(familyTree,newNode);
}
public Node breadthFirst(Node T, Node newNode){
if(T == null){
T = newNode;
return T;
}
if(T.left == null){
newNode.height = T.height + 1;
T.left = newNode;
return T;
}
else if(T.right == null){
newNode.height = T.height + 1;
T.right = newNode;
return T;
}
else{
T.left = breadthFirst(T.left, newNode);
T.right = breadthFirst(T.right, newNode); <-- this is the corporate
}
return T;
}
你在遞歸思考。你應該反覆思考。在做廣度優先的時候,要與一系列「尚未評估」的節點一起工作。 – Dibbeke
您正在執行depthFirstSearch實現,如果您想執行breathFirstSearch,請使用隊列。 –
試圖首先建立一棵樹,寬度。 –