java实现二叉树的深度优先遍历
目录
java实现二叉树的深度优先遍历
深度优先三种遍历方法
1.先序遍历
2.中序遍历
3.后序遍历
1.定义树节点
(这里我重构了tostring方法)
package com.data.tree;
public class Node {
int value;
Node left;
Node right;
public Node(int val) {
value = val;
}
@Override
public String toString() {
return "Node [value=" + value + ", left=" + left + ", right=" + right + "]";
}
}
2.二叉树的构建,遍历
package com.data.tree;
import java.util.LinkedList;
import java.util.Queue;
public class BinaryTree {
Node root = null;
//add
public void insert(int num) {
Node node = new Node(num);
if(root==null) {
root=node;
return;
}
Node index = root;
while(true) {
if(index.value>num) {
if(index.left==null) {
index.left=node;
return;
}else {
index=index.left ;
}
}else {
if(index.right==null) {
index.right =node;
return;
}else {
index=index.right;
}
}
}
}
//遍历
public void levelOrder() {
Queue<Node> queue = new LinkedList<Node>();
if(root!=null) {
queue.add(root);
}
Node index =null;
while(!queue.isEmpty()) {
index =queue.poll();
System.out.print(index.value+" ");
if(index.left!=null) {
queue.add(index.left);
}
if(index.right!=null) {
queue.add(index.right);
}
}
System.out.println();
}
//深度优先
//先序遍历
public void beforeOrder(Node node) {
if(node==null) {
return;
}
System.out.print(node.value+" ");
beforeOrder(node.left);
beforeOrder(node.right);
}
//中序
public void inOrder(Node node) {
if(node==null) {
return;
}
inOrder(node.left);
System.out.print(node.value+" ");
inOrder(node.right);
}
//后序
public void afterOrder(Node node) {
if(node==null) {
return;
}
afterOrder(node.left);
afterOrder( node.right);
System.out.print(node.value+" ");
}
}
3.test测试
package com.data.tree;
public class test {
public static void main(String[] args) {
BinaryTree tree = new BinaryTree();
tree.insert(15);
tree.insert(10);
tree.insert(1);
tree.insert(11);
tree.insert(20);
tree.insert(21);
tree.insert(18);
System.out.print("先序: ");
tree.beforeOrder(tree.root);
System.out.println();
System.out.print("中序: ");
tree.inOrder(tree.root);
System.out.println();
System.out.print("后序: ");
tree.afterOrder(tree.root);
System.out.println();
}
}