二叉树遍历分为深度优先和广度优先方式。
- 深度优先使用递归方式
- 广度优先使用迭代方式
/**
* 二叉树节点类
*/
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> list = new ArrayList<>();
pre(root, list);
return list;
}
public void pre(TreeNode node, List<Integer> list){
if (node == null){
return ;
}
list.add(node.val);
pre(node.left, list);
pre(node.right, list);
}
}
- 中序遍历
class Solution {
public List<Integer> inorderTraversal(TreeNode root) {
List<Integer> list = new ArrayList<>();
mid(root, list);
return list;
}
public void mid(TreeNode node, List<Integer> list){
if(node == null){
return;
}
mid(node.left, list);
list.add(node.val);
mid(node.right, list);
}
}
- 后序遍历
class Solution {
public List<Integer> postorderTraversal(TreeNode root) {
List<Integer> list = new ArrayList<>();
post(root, list);
return list;
}
public void post(TreeNode node, List<Integer> list){
if(node == null){
return;
}
post(node.left, list);
post(node.right, list);
list.add(node.val);
}
}