二叉树的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();
    }

}

猜你喜欢

转载自blog.csdn.net/wd_boy/article/details/87367799