前序遍历:
前序遍历首先访问根节点,然后遍历左子树,最后遍历右子树。
前序遍历后的结果是:FBADCEGIH
题目链接:力扣144 https://leetcode.cn/problems/binary-tree-preorder-traversal/
二叉树前序遍历的代码(递归):
class Solution {
public List<Integer> preorderTraversal(TreeNode root) {
List<Integer> res = new ArrayList<>();
preOrder(root,res);
return res;
}
public void preOrder(TreeNode root,List<Integer>res){
if(root==null){
return ;
}
res.add(root.val);
preOrder(root.left,res);
preOrder(root.right,res);
}
}
中序遍历:先遍历左子树,然后访问根节点,然后遍历右子树
中序遍历的结果是ABCDEFGHI
题目链接:力扣94https://leetcode.cn/problems/binary-tree-inorder-traversal/
中序遍历的代码(递归算法):
class Solution {
public List<Integer> inorderTraversal(TreeNode root) {
List<Integer> res = new ArrayList<>();
inOrder(root,res);
return res;
}
public void inOrder(TreeNode root,List<Integer> res){
if(root==null){
return ;
}
inOrder(root.left,res);
res.add(root.val);
inOrder(root.right,res);
}
}
后序遍历:先遍历左子树,然后遍历右子树,最后访问树的根节点
后序遍历的顺序是ACEDBHIGF
题目链接:力扣145https://leetcode.cn/problems/binary-tree-postorder-traversal/
class Solution {
public List<Integer> postorderTraversal(TreeNode root) {
List<Integer> res = new ArrayList<>();
postOrder(root,res);
return res;
}
public void postOrder(TreeNode root, List<Integer> res){
if(root==null) return ;
postOrder(root.left,res);
postOrder(root.right,res);
res.add(root.val);
}
}
层序遍历:
层序遍历就是逐层遍历树结构。
广度优先搜索是一种广泛运用在树或图这类数据结构中,遍历或搜索的算法。 该算法从一个根节点开始,首先访问节点本身。 然后遍历它的相邻节点,其次遍历它的二级邻节点、三级邻节点,以此类推。
遍历顺序:FBGADICEH
题目链接:https://leetcode.cn/problems/binary-tree-level-order-traversal/
代码:
class Solution {
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> res = new ArrayList<>();
levelHelper(res,root,0);
return res;
}
public void levelHelper(List<List<Integer>> list, TreeNode root,int level){
if(root == null){
return ;
}
if(level>=list.size()){
list.add(new ArrayList<>());
}
list.get(level).add(root.val);
levelHelper(list,root.left,level+1);
levelHelper(list,root.right,level+1);
}
}