难度(medium)
题目描述:
求给定的二叉树的后序遍历。例如:给定的二叉树为{1,#,2,3}
1↵ ↵ 2↵ /↵ 3↵
返回[3,2,1]
思路:
根据后序遍历的规则,左——右——根,那么可以考虑先找到左子节点的最底层的左子节点,然后进行保存,同样的,再找到左子节点的最底层的左子节点进行保存,再找到根节点保存,然后按照这种顺序进行输出,利用递归实现树的所有节点遍历。代码:
import java.util.ArrayList; public static ArrayList<Integer> postOrder(TreeNode root) { //如果根不为空 if (root != null) { //递归找到此次根下最底层的左子节点 ArrayList<Integer> left = postOrder(root.left); //递归找到此次根下最底层的右子节点 ArrayList<Integer> right = postOrder(root.right); ArrayList<Integer> result = new ArrayList<>(); //按规则顺序添加 result.addAll(left); result.addAll(right); result.add(root.data); //返回添加的一种结果,最后将几种集中结果凑在一起就是完整的后序遍历 return result; } //如果根为空 return new ArrayList<>(); }}
还有一种方法时非递归形式,用栈来解决,也可以。
封面来源于网络,侵删