二叉树的递归遍历
题目链接:
前序遍历: LeetCode 144
中序遍历: LeetCode 94
后序遍历: LeetCode 145
描述
给你二叉树的根节点 root
,返回它节点值的 前序
、 中序
、 后序
遍历。
示例1:前序遍历
输入:root = [1,null,2,3]
输出:[1,2,3]
示例2:中序遍历
输入:root = [1,null,2,3]
输出:[1,3,2]
示例3:后序遍历
输入:root = [1,null,2,3]
输出:[3,2,1]
思路
这里前中后,其实指的就是中间节点的遍历顺序,只要大家记住 前中后序指的就是中间节点的位置就可以了。
看如下中间节点的顺序,就可以发现,中间节点的顺序就是所谓的遍历方式
前序遍历:中左右
中序遍历:左中右
后序遍历:左右中
二叉树的定义
public 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;}
}
前序遍历
class Solution {public List<Integer> preorderTraversal(TreeNode root) {List<Integer> result = new ArrayList<>();preorder(root, result);return result;}public void preorder(TreeNode root, List result){if(root == null){return;}result.add(root.val);preorder(root.left, result);preorder(root.right, result);}
}
中序遍历
class Solution {public List<Integer> inorderTraversal(TreeNode root) {List<Integer> result = new ArrayList<>();inorder(root,result);return result;}public void inorder(TreeNode root, List result){if(root == null){return;}inorder(root.left,result);result.add(root.val);inorder(root.right,result);}
}
后序遍历
class Solution {public List<Integer> postorderTraversal(TreeNode root) {List<Integer> result = new ArrayList<>();postorder(root,result);return result;}public void postorder(TreeNode root, List list){if(root == null){return;}postorder(root.left,list);postorder(root.right,list);list.add(root.val);}
}