题目:
给定一个二叉树,返回它的 后序 遍历。
示例:
输入: [1,null,2,3]
1
\
2
/
3
输出: [3,2,1]
程序入口:
TreeNode treeNode = new TreeNode(1);
treeNode.left = null;
treeNode.right = new TreeNode(2);
treeNode.right.left = new TreeNode(3);
List<Integer> integers = postorderTraversal(treeNode);
System.out.println(integers);
解决方法一:
public static List<Integer> postorderTraversal(TreeNode root) {
List<Integer> result = new LinkedList<>();
reversePO(root,result);
return result;
}
private static void reversePO(TreeNode root, List<Integer> result) {
if (root != null) {
reversePO(root.left,result);
reversePO(root.right,result);
result.add(root.val);
}
}
解决方法二:
public static List<Integer> postorderTraversal2(TreeNode root) {
List<Integer> result = new LinkedList<>();
LinkedList<TreeNode> stack = new LinkedList<>();
stack.offer(root);
while (!stack.isEmpty()){
TreeNode treeNode = stack.pollLast();
if (treeNode == null) {
continue;
}
if (treeNode.left == null && treeNode.right == null) {
result.add(treeNode.val);
continue;
}
stack.add(treeNode);
if (treeNode.right != null) {
stack.offer(treeNode.right);
}
if (treeNode.left != null) {
stack.offer(treeNode.left);
}
treeNode.left = treeNode.right = null;
}
return result;
}