关于二叉树BFS、DFS的总结

1 BFS、DFS算法的定义

BFS:广度优先搜索算法,也可称为层序遍历,按照二叉树的层次进行访问,可采用队列保存每一层的节点。

DFS:深度优先搜索算法,尽可能深的搜索树的分支,当当前节点所在的边都被访问过,回溯至发现当前节点边的起始节点,一直进行至源节点可达的所有节点为止。

2 二叉树的定义

public class TreeNode{
    int val;
    TreeNode left;
    TreeNode right;

    public TreeNode() {
    }

    public TreeNode(int val) {
        this.val = val;
    }

    public TreeNode(int val, TreeNode left, TreeNode right) {
        this.val = val;
        this.left = left;
        this.right = right;
    }
}

3 采用BFS遍历二叉树的代码实现

  • 代码流程
    • 1.定义二叉树;
    • 2.初始化队列,root入队;
    • 3.循环遍历,当队列为空时跳出
      • 1.节点出队;
      • 2.如果左子节点不为空,左子节点入队;
      • 3.如果右子节点不为空,右子节点入队;

代码实现

public class BFSTree {
    public void bfsTree(TreeNode root){
        LinkedList<TreeNode> queue =  new LinkedList<>();
        if (root != null) queue.add(root);
        while (!queue.isEmpty()){
            TreeNode node = queue.poll();
            if (node.left != null) queue.add(node.left);
            if (node.right != null) queue.add(node.right);
        }
    }
}

4 采用BFS遍历二叉树的代码实现

4.1 递归实现

树中常见的DFS可分为:先序遍历、中序遍历、后序遍历,这里使用先序遍历实现。

  • 代码流程
    • 1.定义二叉树
    • 2.递归终止条件:越过叶子节点;
    • 3.递归递推:本质是对树做先序遍历
      • 1.dfs(root.left);
      • 2.dfs(root.right);

代码实现

public class DFSTree{
    List<Integer> list = new ArrayList<>();
    public void dfsTree(TreeNode root){
        if (root == null) return;
        list.add(root.val);
        dfsTree(root.left);
        dfsTree(root.s
posted @ 2022-07-01 12:03  IWANNPEACE  阅读(132)  评论(1编辑  收藏  举报