我似乎在构建宽度优先树时遇到问题。宽度优先树
在下面的代码中,我有一个节点通过另一个类中的循环插入。
树的结构应该是像这样:
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,请使用队列。 –
试图首先建立一棵树,宽度。 –