本文介绍: 我们将首先遍历每个节点然后进行递归调用,直到到达该节点没有任何子节点阶段。一旦我们有了这种情况,我们可以返回我们的调用并将该节点添加到我们的结果中。一旦我们完成所有节点遍历,现在我们终于可以将根节点添加到列表中了。还可以使用基于堆栈方法遍历节点时将每个节点添加到堆栈中时间复杂度:O(N),其中 N 是树中的节点数空间复杂度:O(H),其中 H 是树的高度

介绍

问题陈述

例子

完整的递归代码

class Solution {
List

result =
new ArrayList<>();

public List

postorder(Node root) {

if(root==
null)
return result;

sol1(root);

result.add(root.val);

return result;

}

private
void sol1(Node root){

if(root.children==
null){

return;

}

for(Node node:root.children){

sol1(node);

result.add(node.val);

}

}

}

思路
我们将首先遍历每个子节点,然后进行递归调用,直到到达该节点没有任何子节点的阶段

一旦我们有了这种情况,我们就可以返回我们的调用并将该节点添加到我们的结果中。

private void sol1(Node root){
if(root.children==null){
return;
}

for(Node node:root.children){
sol1(node);
result.add(node.val);
}
}

一旦我们完成所有子节点的遍历,现在我们终于可以将根节点添加到列表中了。

        sol1(root);
result.add(root.val);
return result;

还可以使用基于堆栈方法在遍历节点时将每个子节点添加到堆栈中

class Solution {
List

result =
new ArrayList<&gt;();

public List

postorder(Node root) {

sol2(root);

return result;

}

private
void sol2(Node root){

if(root.children==
null){

return;

}

Stack

stack =
new Stack<&gt;();

stack.push(root);

while(!stack.isEmpty()){

Node curr = stack.pop();

result.add(curr.val);

for(Node node: curr.children){

stack.push(node);  

}

}

Collections.reverse(result); 

}

}

复杂

结论

https://www.jdon.com/70540.html

原文地址:https://blog.csdn.net/cfy_banq/article/details/134821486

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_47920.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注