博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[LeetCode]: 145: Binary Tree Postorder Traversal
阅读量:6235 次
发布时间:2019-06-22

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

题目:

Given a binary tree, return the postorder traversal of its nodes' values.

For example:

Given binary tree {1,#,2,3},

1    \     2    /   3

 

return [3,2,1].

Note: Recursive solution is trivial, could you do it iteratively?

 

思路1:递归解决

 

代码:

public ArrayList
postorderTraversal(TreeNode root) { ArrayList
arrResult = new ArrayList
(); return AddNode(root,arrResult); } public ArrayList
AddNode(TreeNode root,ArrayList
arrTotal) { if(root == null){ return arrTotal; } AddNode(root.left , arrTotal); AddNode(root.right , arrTotal); arrTotal.add(root.val); return arrTotal; }

 

思路2:广度优先搜索的变形,采用栈来记录节点

其中关键的一个点就是:当某一个节点的左子树或右子树不为空的时候,

     - 需要将左子树或者右子树也加到这个栈里面

     - 同时还要将原节点对应的左右子树置成null,这样再次遍历栈时,再回到那个节点才不会引起无限循环

public ArrayList
postorderTraversal(TreeNode root) { ArrayList
arrResult = new ArrayList
(); Stack
staTemp = new Stack
(); Stack
staResult= new Stack
(); if(root == null){ return arrResult; } staTemp.push(root); while(!staTemp.empty()){ TreeNode nodeTemp = staTemp.peek(); if(nodeTemp.left == null && nodeTemp.right == null){ arrResult.add(nodeTemp.val); staTemp.pop(); } else{ if(nodeTemp.right != null){ staTemp.push(nodeTemp.right); nodeTemp.right = null; } if(nodeTemp.left != null){ staTemp.push(nodeTemp.left); nodeTemp.left = null; } } } return arrResult; }

 

转载于:https://www.cnblogs.com/savageclc26/p/4864626.html

你可能感兴趣的文章
<转> 编写超级可读代码的15个最佳实践
查看>>
VMware vSphere Client的显示语言
查看>>
php小代码(转)
查看>>
Windows内核编程之:返回状态值
查看>>
Xeon Phi之MIC编程知识点
查看>>
jigloo安装和介绍
查看>>
Linux下配置SSL (转)
查看>>
《转》程序员每年要做的十件事
查看>>
Android实现XML解析技术
查看>>
asp.net使用include包含文件
查看>>
迪米特法则
查看>>
Sql Server数据库自增长字段标识列的插入或更新修改操作办法
查看>>
CentOS,Fedora,Debian,Ubuntu,SuSE——我到底爱谁
查看>>
js方法call和apply实例解析
查看>>
也谈读书和书籍选择问题(C#)
查看>>
Jquery 数组操作(转)
查看>>
【BZOJ】1093: [ZJOI2007]最大半连通子图(tarjan+拓扑序)
查看>>
老码农教你学英语
查看>>
博客转发小工具2
查看>>
simple_html_dom使用小结
查看>>