博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
leetcode讲解--590. N-ary Tree Postorder Traversal
阅读量:6317 次
发布时间:2019-06-22

本文共 1902 字,大约阅读时间需要 6 分钟。

题目

Given an n-ary tree, return the postorder traversal of its nodes' values.

For example, given a 3-ary tree:

Return its postorder traversal as: [5,6,3,2,4,1].

Note:

Recursive solution is trivial, could you do it iteratively?

讲解

这道题跟先序遍历差不多,调换一下添加结点的顺序而已。参考:

但这道题的迭代解法稍微有点麻烦,需要一个标记,初次访问一个结点的时候我们并不能立即将它的值加进结果里,而是要等它的所有孩子访问完毕再加。也就是说我们第一次访问它并不pop,第二次访问它才pop。

Java代码

递归解法:

/*// Definition for a Node.class Node {    public int val;    public List
children; public Node() {} public Node(int _val,List
_children) { val = _val; children = _children; }};*/class Solution { private List
result = new ArrayList<>(); public List
postorder(Node root) { if(root==null){ return result; } for(Node node:root.children){ postorder(node); } result.add(root.val); return result; }}

迭代解法:

/*// Definition for a Node.class Node {    public int val;    public List
children; public Node() {} public Node(int _val,List
_children) { val = _val; children = _children; }};*/class Solution { private List
result = new ArrayList<>(); private Stack
stack = new Stack<>(); private Stack
stack_temp = new Stack(); public List
postorder(Node root) { if(root==null){ return result; } Bundle rootBundle = new Bundle(root); stack.push(rootBundle); while(!stack.empty()){ Bundle bundle = stack.peek(); if(bundle.flag){ result.add(stack.pop().node.val); continue; } for(Node node:bundle.node.children){ Bundle d = new Bundle(node); stack_temp.push(d); } while(!stack_temp.empty()){ stack.push(stack_temp.pop()); } bundle.flag = true; } return result; } class Bundle{ Node node; Boolean flag; public Bundle(Node node){ flag = false; this.node = node; } }}

转载地址:http://yyuaa.baihongyu.com/

你可能感兴趣的文章
spring boot 学习笔记(二)(servlet 3.0 异步请求)
查看>>
记一次开放平台
查看>>
iptables使用语法简述
查看>>
自动统计Kafka集群日志
查看>>
zabbix从入门到精通之---Zabbix proxy的配置(一)
查看>>
Windows启动顺序详解
查看>>
linux双网卡绑定实现负载均衡
查看>>
Android应用程序启动过程源代码分析(3)
查看>>
游戏发展史(Shell数字游戏)
查看>>
Linux下的iptables详解及配置
查看>>
js/jq实现获取手机验证码倒计时效果
查看>>
【Python之旅】第六篇(三):Python多线程及其使用方法
查看>>
Flask+Gunicorn+Gevent+Supervisor+Nginx生产环境部署
查看>>
指定页面不缓存
查看>>
检测有没有注入点:
查看>>
SVN服务设置提交时备注文字长度
查看>>
Oracle 11G DataGuard重启详细过程
查看>>
spring boot 入门注意
查看>>
Windows操作系统文件安全NDIS-Hook的实现方法
查看>>
linux free命令
查看>>