递归-------二叉树的前、中、后序遍历
题目:
如下二叉树:
1
/ \
2 3
/\ \
4 5 6
/\
7 8
前序遍历:1 2 4 7 8 5 3 6
中序遍历:7 4 8 2 5 1 3 6
后序遍历:7 8 4 5 2 6 3 1
递归方法:
/**
* 递归--前序遍历:根-左-右
* 二叉树的前序遍历
* * * ** 1
* **** / \
* *****2 3
* **** /\ \
* ****4 5 6
* *** /\
* ***7 8
* 前序遍历:1 2 4 7 8 5 3 6
*
* @param root
* @return
*/
public static List<Integer> preorderTraversal(TreeNode root) {
List<Integer> res = new ArrayList<>();
preHelper(root, res);
return res;
}
public static void preHelper(TreeNode root, List<Integer> res) {
if (root != null) {
res.add(root.value);
if (root.left != null) {
preHelper(root.left, res);
}
if (root.right != null) {
preHelper(root.right, res);
}
}
}
* 递归中序遍历:左-根-右
* 中序遍历
* * * * ** 1
* * **** / \
* * *****2 3
* * **** /\ \
* * ****4 5 6
* * *** /\
* * ***7 8
* * * 中序遍历:7 4 8 2 5 1 3 6
*
* @param root
* @return
*/
public static List<Integer> inorderTraversal(TreeNode root) {
List<Integer> res = new ArrayList<>();
inHelper(root, res);
return res;
}
public static void inHelper(TreeNode root, List<Integer> res) {
if (root != null) {
if (root.left != null) {
inHelper(root.left, res);
}
res.add(root.value);
if (root.right != null) {
inHelper(root.right, res);
}
}
}
/**
* 后序遍历:左-右-根
* * * ** 1
* **** / \
* *****2 3
* **** /\ \
* ****4 5 6
* *** /\
* ***7 8
* 后序遍历: 7 8 4 5 2 6 3 1
*
* @param root
* @return
*/
public static List<Integer> postOrderTraversal(TreeNode root) {
List<Integer> res = new ArrayList<>();
postHelper(root, res);
return res;
}
private static void postHelper(TreeNode root, List<Integer> res) {
if (root != null) {
if (root.left != null) {
postHelper(root.left, res);
}
if (root.right != null) {
postHelper(root.right, res);
}
res.add(root.value);
}
}