文章目录
- 递归法
- 非递归法
题目描述:
题目链接:LeetCode-145-二叉树的后序遍历
递归法
解题思路:递归,具体可以参考 LeetCode-144-二叉树的前序遍历
代码实现:
class Solution {
List<Integer> list=new ArrayList<>();
public List<Integer> postorderTraversal(TreeNode root) {
if (root==null){
return new ArrayList<>();
}
postorderTraversal(root.left);
postorderTraversal(root.right);
list.add(root.val);
return list;
}
}
非递归法
解题思路:非递归,具体可以参考 LeetCode-144-二叉树的前序遍历
后序遍历的顺序为:左右中,让入栈顺序应为:左->右->中,再翻转list即可
class Solution {
List<Integer> list=new ArrayList<>();
public List<Integer> postorderTraversal(TreeNode root) {
if (root == null) {
return new ArrayList<>();
}
List<Integer> list = new ArrayList<>();
// 后序:左右中 入栈顺序:左->右->中,再翻转list
Stack<TreeNode> stack = new Stack<TreeNode>();
stack.push(root);
while (!stack.isEmpty()) {
TreeNode node = stack.pop();
list.add(node.val);
if (node.left!=null){
stack.push(node.left);// 在前序遍历的基础上交换这两句,然后翻转list即可
}
if (node.right!=null){
stack.push(node.right);
}
}
Collections.reverse(list);// 使用工具类翻转List
return list;
}
}