周末突然降温,哪儿也去不了,不如在家刷题。
题目描述
Given a binary tree, return the postorder traversal of its nodes’ values.
For example:
Given binary tree{1,#,2,3},
return[3,2,1].
Note: Recursive solution is trivial, could you do it iteratively?
使用非递归方法后序遍历二叉树。
解题思路
二叉树后序遍历就是对每个节点按照左、右、中的顺序进行遍历。
详细的解析参见:二叉树遍历(先序、中序、后序) ,讲得非常详细易懂。
代码实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| package com.postorder.raversal;
import java.util.ArrayList; import java.util.Stack;
public class Solution { public ArrayList<Integer> postorderTraversal(TreeNode root) { Stack<TreeNode> stack = new Stack<>(); ArrayList<Integer> list = new ArrayList<>(); TreeNode pointer = root; TreeNode lastVisit = root; while (!stack.isEmpty() || pointer != null) { while (pointer != null) { stack.push(pointer); pointer = pointer.left; } pointer = stack.peek(); if (pointer.right == null || pointer.right == lastVisit) { list.add(pointer.val); lastVisit = pointer; stack.pop(); pointer = null; } else { pointer = pointer.right; } } return list; } }
|
是时候好好重修一下数据结构了。