1.工程目录如下:
2.定义节点信息的类:TreeNode.java
package binarytree;
public class TreeNode{
public TreeNode() {
// TODO Auto-generated constructor stub
}
int value;
TreeNode left;
TreeNode right;
public TreeNode(int value) {
// TODO Auto-generated constructor stub
this.value = value;
}
}
3.构建树的类:BinaryTree.java
package binarytree;
public class BinaryTree {
// private TreeNode root = new TreeNode();
public TreeNode getBinaryTree(int[] arr, int index) {
// TODO Auto-generated method stub
TreeNode node = null;
if(index < arr.length){
int value = arr[index];
node = new TreeNode(value);
node.left = getBinaryTree(arr, index*2+1);
node.right = getBinaryTree(arr, index*2+2);
return node;
}
return node;
}
}
4.深度优先遍历的类:DFS.java
package binarytree;
import java.util.Stack;
public class DFS {
public void getDFS(TreeNode root){
if(root == null){
return;
}
Stack<TreeNode> stack = new Stack<>();
stack.push(root);
while(!stack.isEmpty()){
TreeNode temp = stack.peek();
System.out.print(temp.value+"\t");
stack.pop();
if(temp.right != null){
stack.push(temp.right);
}
if(temp.left != null){
stack.push(temp.left);
}
}
}
}
5.广度优先遍历的类:BFS.java
package binarytree;
import java.util.ArrayList;
public class BFS {
public void getBFS(TreeNode root) {
// TODO Auto-generated method stub
if(root == null){
return;
}
ArrayList<TreeNode> queue = new ArrayList<>();
queue.add(root);
while(queue.size() > 0){
TreeNode temp = queue.get(0);
queue.remove(0);
System.out.print(temp.value+"\t");
if(temp.left != null){
queue.add(temp.left);
}
if(temp.right != null){
queue.add(temp.right);
}
}
}
}
6.测试类:Test.java
package binarytree;
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] arr = new int[]{
1,2,3,4,5,6,7
};
BinaryTree binaryTree = new BinaryTree();
TreeNode root = binaryTree.getBinaryTree(arr, 0);
new DFS().getDFS(root);
System.out.println("\n深度优先遍历结束。。。");
new BFS().getBFS(root);
System.out.print("\n广度优先遍历结束。。。");
}
}
其中测试的二叉树如下: