算法复习 - 广度优先遍历、深度优先遍历(BFS、DFS)

5 篇文章 0 订阅
  • BinaryTreeNode.java
/**
* Created by apple on 16/6/18.
*/
public class BinaryTreeNode {

   private BinaryTreeNode leftNode;
   private BinaryTreeNode rightNode;
   private String root;

   public BinaryTreeNode() {
       this.leftNode = null;
       this.rightNode = null;
       this.root = null;
   }

   public BinaryTreeNode(String root) {
       this.leftNode = null;
       this.rightNode = null;
       this.root = root;
   }

   public BinaryTreeNode(BinaryTreeNode leftNode, BinaryTreeNode rightNode, String root) {
       this.leftNode = leftNode;
       this.rightNode = rightNode;
       this.root = root;
   }

   public BinaryTreeNode getLeftNode() {
       return leftNode;
   }

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

   public BinaryTreeNode getRightNode() {
       return rightNode;
   }

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

   public String getRoot() {
       return root;
   }

   public void setRoot(String root) {
       this.root = root;
   }
}
  • BinaryTree.java
/**
* Created by apple on 16/6/18.
* 生成默认的二叉树,初始化
*/
public class BinaryTree {

   private BinaryTreeNode root;

   /**
    *          A
    *        /  \
    *       B    C
    *     /  \  / \
    *    D   E F  G
    *       / / \
    *      H I  J
    */
   public BinaryTree() {
       BinaryTreeNode node3_0 = new BinaryTreeNode("H");
       BinaryTreeNode node3_1 = new BinaryTreeNode("I");
       BinaryTreeNode node3_2 = new BinaryTreeNode("J");

       BinaryTreeNode node2_0 = new BinaryTreeNode("D");
       BinaryTreeNode node2_1 = new BinaryTreeNode(node3_0, null, "E");
       BinaryTreeNode node2_2 = new BinaryTreeNode(node3_1, node3_2, "F");
       BinaryTreeNode node2_3 = new BinaryTreeNode("G");

       BinaryTreeNode node1_0 = new BinaryTreeNode(node2_0, node2_1, "B");
       BinaryTreeNode node1_1 = new BinaryTreeNode(node2_2, node2_3, "C");

       root = new BinaryTreeNode(node1_0, node1_1, "A");
   }

   public BinaryTreeNode getRoot() {
       return root;
   }
}
  • ##### BinaryTreeSearch.java
import java.util.LinkedList;
import java.util.Queue;
import java.util.Stack;

/**
* Created by apple on 16/6/18.
*/
public class BinaryTreeSearch {

   public static void BFS(BinaryTree tree) {
       Queue<BinaryTreeNode> openQueue = new LinkedList<>();
       Queue<BinaryTreeNode> closeQueue = new LinkedList<>();
       openQueue.add(tree.getRoot());
       while (openQueue.size() > 0) {
           if (openQueue.peek().getLeftNode() != null) {
               openQueue.add(openQueue.peek().getLeftNode());
           }
           if (openQueue.peek().getRightNode() != null) {
               openQueue.add(openQueue.peek().getRightNode());
           }
           System.out.print(openQueue.peek().getRoot());
           closeQueue.add(openQueue.poll());
       }
       System.out.println();
   }

   public static void DFS (BinaryTree tree) {
       Stack<BinaryTreeNode> openStack = new Stack<>();
       Stack<BinaryTreeNode> closeStack = new Stack<>();
       openStack.add(tree.getRoot());
       while (openStack.size() > 0) {
           closeStack.add(openStack.pop());
           System.out.print(closeStack.peek().getRoot());
           if (closeStack.peek().getRightNode() != null) {
               openStack.add(closeStack.peek().getRightNode());
           }
           if (closeStack.peek().getLeftNode() != null) {
               openStack.add(closeStack.peek().getLeftNode());
           }
       }
       System.out.println();
   }

}
  • ##### Hello.java
/**
* Created by apple on 16/6/13.
*/
public class Hello {

   public static void main(String[] args) {
       BinaryTree tree = new BinaryTree();
       System.out.println("BFS");
       BinaryTreeSearch.BFS(tree);
       System.out.println("DFS");
       BinaryTreeSearch.DFS(tree);
   }

}
  • ##### BinaryTreeNode.java
/**
* Created by apple on 16/6/18.
*/
public class BinaryTreeNode {

   private BinaryTreeNode leftNode;
   private BinaryTreeNode rightNode;
   private String root;

   public BinaryTreeNode() {
       this.leftNode = null;
       this.rightNode = null;
       this.root = null;
   }

   public BinaryTreeNode(String root) {
       this.leftNode = null;
       this.rightNode = null;
       this.root = root;
   }

   public BinaryTreeNode(BinaryTreeNode leftNode, BinaryTreeNode rightNode, String root) {
       this.leftNode = leftNode;
       this.rightNode = rightNode;
       this.root = root;
   }

   public BinaryTreeNode getLeftNode() {
       return leftNode;
   }

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

   public BinaryTreeNode getRightNode() {
       return rightNode;
   }

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

   public String getRoot() {
       return root;
   }

   public void setRoot(String root) {
       this.root = root;
   }
}
  • ##### BinaryTree.java
/**
* Created by apple on 16/6/18.
* 生成默认的二叉树,初始化
*/
public class BinaryTree {

   private BinaryTreeNode root;

   /**
    *          A
    *        /  \
    *       B    C
    *     /  \  / \
    *    D   E F  G
    *       / / \
    *      H I  J
    */
   public BinaryTree() {
       BinaryTreeNode node3_0 = new BinaryTreeNode("H");
       BinaryTreeNode node3_1 = new BinaryTreeNode("I");
       BinaryTreeNode node3_2 = new BinaryTreeNode("J");

       BinaryTreeNode node2_0 = new BinaryTreeNode("D");
       BinaryTreeNode node2_1 = new BinaryTreeNode(node3_0, null, "E");
       BinaryTreeNode node2_2 = new BinaryTreeNode(node3_1, node3_2, "F");
       BinaryTreeNode node2_3 = new BinaryTreeNode("G");

       BinaryTreeNode node1_0 = new BinaryTreeNode(node2_0, node2_1, "B");
       BinaryTreeNode node1_1 = new BinaryTreeNode(node2_2, node2_3, "C");

       root = new BinaryTreeNode(node1_0, node1_1, "A");
   }

   public BinaryTreeNode getRoot() {
       return root;
   }
}
  • ##### BinaryTreeSearch.java
import java.util.LinkedList;
import java.util.Queue;
import java.util.Stack;

/**
* Created by apple on 16/6/18.
*/
public class BinaryTreeSearch {

   public static void BFS(BinaryTree tree) {
       Queue<BinaryTreeNode> openQueue = new LinkedList<>();
       Queue<BinaryTreeNode> closeQueue = new LinkedList<>();
       openQueue.add(tree.getRoot());
       while (openQueue.size() > 0) {
           if (openQueue.peek().getLeftNode() != null) {
               openQueue.add(openQueue.peek().getLeftNode());
           }
           if (openQueue.peek().getRightNode() != null) {
               openQueue.add(openQueue.peek().getRightNode());
           }
           System.out.print(openQueue.peek().getRoot());
           closeQueue.add(openQueue.poll());
       }
       System.out.println();
   }

   public static void DFS (BinaryTree tree) {
       Stack<BinaryTreeNode> openStack = new Stack<>();
       Stack<BinaryTreeNode> closeStack = new Stack<>();
       openStack.add(tree.getRoot());
       while (openStack.size() > 0) {
           closeStack.add(openStack.pop());
           System.out.print(closeStack.peek().getRoot());
           if (closeStack.peek().getRightNode() != null) {
               openStack.add(closeStack.peek().getRightNode());
           }
           if (closeStack.peek().getLeftNode() != null) {
               openStack.add(closeStack.peek().getLeftNode());
           }
       }
       System.out.println();
   }

}
  • ##### Hello.java
/**
* Created by apple on 16/6/13.
*/
public class Hello {

   public static void main(String[] args) {
       BinaryTree tree = new BinaryTree();
       System.out.println("BFS");
       BinaryTreeSearch.BFS(tree);
       System.out.println("DFS");
       BinaryTreeSearch.DFS(tree);
   }

}
  • 结果

结果

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值