【发布时间】:2016-11-13 00:59:28
【问题描述】:
我似乎在构建广度优先树时遇到问题。
在下面的代码中,我有一个通过另一个类中的循环插入的节点。
树的结构应该是这样的:
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;
}
【问题讨论】:
-
你在递归思考。你应该反复思考。在进行广度优先时,使用“尚未评估”的节点队列。
-
你在做一个depthFirstSearch的实现,如果你想做breathFirstSearch,使用队列。
-
尝试建树,广度优先。
标签: java nodes breadth-first-search