我是靠谱客的博主 淡淡便当,最近开发中收集的这篇文章主要介绍二叉树的BFS 和 DFS 实现概念源码实现,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

这里写自定义目录标题

  • 概念
  • 源码实现
    • 节点实体类定义
    • 树定义
    • 测试类实现

概念

BFS又称广度优先遍历,从树的根节点按照层级进行遍历
DFS又称深度优先遍历,包括先根遍历(先遍历根节点,其次左结点,最后右节点),中根遍历(先遍历左节点,其次根结点,最后右节点),后跟遍历(先遍历左节点,其次右结点,最后根节点

源码实现

节点实体类定义

package com.cxk.tree;

public class TreeNode {

    private String nodeName;
    private TreeNode leftNode;
    private TreeNode rightNode;

    public TreeNode(String nodeName) {
        this.nodeName = nodeName;
    }

    public String getNodeName() {
        return nodeName;
    }

    public void setNodeName(String nodeName) {
        this.nodeName = nodeName;
    }

    public TreeNode getLeftNode() {
        return leftNode;
    }

    public void setLeftNode(TreeNode leftNode) {
        this.leftNode = leftNode;
    }

    public TreeNode getRightNode() {
        return rightNode;
    }

    public void setRightNode(TreeNode rightNode) {
        this.rightNode = rightNode;
    }
}

树定义

package com.cxk.tree;


import java.util.concurrent.LinkedBlockingQueue;

public class Tree {

    private TreeNode root;

    public Tree(TreeNode root) {
        this.root = root;
    }

    public void bfs(){
        bfs(this.root);
    }

    public void bfs(TreeNode node){

        if(node == null)
            return;

        LinkedBlockingQueue<TreeNode> queue = new LinkedBlockingQueue<TreeNode>();
        queue.add(node);
        while(!queue.isEmpty()){
            TreeNode peek = queue.peek();
            System.out.println("NodeName : " + peek.getNodeName());
            if(peek.getLeftNode() != null)
                queue.add(peek.getLeftNode());
            if(peek.getRightNode() != null)
                queue.add(peek.getRightNode());
            queue.remove();
        }
    }

    public void dfs(){
        dfs(this.root);
    }

    //先根遍历
    public void dfs(TreeNode node){
        if(node == null)
            return;
        System.out.println(node.getNodeName());
        if(node.getLeftNode() != null)
            dfs(node.getLeftNode());
        if(node.getRightNode() != null)
            dfs(node.getRightNode());

    }
 }

测试类实现




package com.cxk.tree;

public class MainTest {

    public static  void  main(String [] args){

        TreeNode node1 = new TreeNode("1");
        TreeNode node2 = new TreeNode("2");
        TreeNode node3 = new TreeNode("3");
        TreeNode node4 = new TreeNode("4");
        TreeNode node5 = new TreeNode("5");
        node1.setLeftNode(node2);
        node1.setRightNode(node3);
        node2.setLeftNode(node4);
        node2.setRightNode(node5);

        Tree tree = new Tree(node1);

        //tree.bfs();
        tree.dfs();
    }

}

最后

以上就是淡淡便当为你收集整理的二叉树的BFS 和 DFS 实现概念源码实现的全部内容,希望文章能够帮你解决二叉树的BFS 和 DFS 实现概念源码实现所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(50)

评论列表共有 0 条评论

立即
投稿
返回
顶部