Java 对于最小-最大算法,如何从树的底部向上执行BFS?

Java 对于最小-最大算法,如何从树的底部向上执行BFS?,java,recursion,tree,depth-first-search,breadth-first-search,Java,Recursion,Tree,Depth First Search,Breadth First Search,每个节点都有一个子节点的ArrayList 叶子已经被评估过了。我想逐级为叶子上面的所有节点设置值,所以我必须为特定级别上的所有节点设置值,以便转到它们的参数并为它们设置值 换言之:1在为X-1级节点设置之前,假设为X级节点设置 换言之2:我需要为X层上的所有叶子设置node.evaluation=1,然后再靠近根 如何做到这一点?我在下面试过了,但似乎不对。我尝试了一个星期 evaluateTree2(root); .... public void evaluateTree2(Node

每个节点都有一个子节点的
ArrayList

叶子已经被评估过了。我想逐级为叶子上面的所有节点设置值,所以我必须为特定级别上的所有节点设置值,以便转到它们的参数并为它们设置值

换言之
1
在为
X-1
级节点设置之前,假设为
X级节点设置

换言之2:我需要为X层上的所有叶子设置node.evaluation=1,然后再靠近根

如何做到这一点?我在下面试过了,但似乎不对。我尝试了一个星期

evaluateTree2(root);
    ....
public void evaluateTree2(Node node){
        for(Node descendant  : node.children) {
            evaluateTree2(descendant);  
            node.evaluation = 1;
            }       
}

您可以使用堆栈和队列。从下到上逐级打印节点的伪代码:(请注意,将子节点放入my_队列的顺序可能会影响应用程序)

时间复杂度为O(n)。堆栈和队列中的insert和pop都是O(1),给定n个元素和每个元素中的n个pop和insert,总的顺序是线性的,即O(n)


树的底部通常是leaves@martijnn2008是的,我想从叶子开始,一层一层地回到根,在我接近根之前,我需要为X层上的所有叶子设置node.evaluation=1。你能附上任何代码吗?我不明白,也看不到其中的递归。你需要递归吗?不,没有,但我不知道你写了什么。“把一个节点放在队列中,弹出它”那个么,若你们在下一行弹出它,为什么要放它呢?还有如何不递归地遍历树。最后我使用了
TreeMap
。java中的队列在添加元素时具有线性时间复杂度。据我所知,大多数标准库中的push和pop-in队列的时间复杂度为O(1)。即使Java中没有任何东西,您也可以使用链表实现一个。如果您找到了其他解决方案,请提供代码?
Stack my_stask
Queue my_queue

insert tree.root into my_queue

while my_queue != empty
  pop Node node from my_queue
  push node.children into my_queue
  push node into my_stask

while my_stask != empty
  pop Node node from my_stask
  print node