目录

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();
	}
}

4.运行结果

https://i-blog.csdnimg.cn/direct/9d084b51525e44c0adcd3e236c5eb88d.png