// Definition for a binary tree node.
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode() {
}
TreeNode(int val) {
this.val = val;
}
TreeNode(int val, TreeNode left, TreeNode right) {
this.val = val;
this.left = left;
this.right = right;
}
}
public class Solution {
// public List<Integer> preorderTraversal(TreeNode root) { //先序
// public List<Integer> inorderTraversal(TreeNode root) { //中序
public List<Integer> postorderTraversal(TreeNode root) { //后序
//1.创建一个List集合,用来存放遍历后的数据
List<Integer> res = new ArrayList<Integer>();
if (root == null) return res; //特殊情况直接返回
// preOrder(root, res);//进入先序遍历
// inOrder(root, res);//进入中序遍历
postOrder(root,res);//进入后序遍历
return res;
}
//递归-先序遍历 根->左->右
public static void preOrder(TreeNode root, List<Integer> res) {
if (root == null) {
return;
}
//*********下面就是对每个相对根结点的操作********//
res.add(root.val);//根
//***************************************//
preOrder(root.left, res);//左
preOrder(root.right, res);//右
}
//递归-中序遍历 左->根->右
public static void inOrder(TreeNode root, List<Integer> res) {
if (root == null) {
return;
}
inOrder(root.left, res);//左
//*********下面就是对每个相对根结点的操作********//
res.add(root.val);//根
//***************************************//
inOrder(root.right, res);//右
}
//递归-后序遍历 左->右->根
public static void postOrder(TreeNode root, List<Integer> res) {
if (root == null) {
return;
}
postOrder(root.left, res);//左
postOrder(root.right, res);//右
//*********下面就是对每个相对根结点的操作********//
res.add(root.val);//根
//***************************************//
}
}