当前位置: 首页 > news >正文

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.运行结果

相关文章:

  • Neo4j 图数据库教程
  • HashMap源码解读
  • 【 <二> 丹方改良:Spring 时代的 JavaWeb】之 Restful的出现,背景和进化,矛盾与取舍
  • 深入理解传输层协议
  • 计算机网络-扩展
  • 【MySQL基础-8】MySQL条件查询详解:高效筛选数据的艺术
  • 群体智能优化算法-旗鱼优化算法 (Sailfish Optimizer, SFO,含Matlab源代码)
  • 大模型的参数数量与学习的知识数量之间
  • Linux系统移植篇(二)Uboot 顶层 Makefile 解析
  • 小测验——根据内参计算一对RGB-D图像对应的点云
  • 计算机二级Python资料
  • Git 常用命令指南
  • 压缩流-ZipOutputStream的用法详解
  • mac系统之MySql图形化工具MySQLworkbench安装
  • 什么是网络协议
  • 【蓝桥杯每日一题】3.16
  • 软件架构设计、详细设计和开发编码的过程中提高性能的技巧和方法
  • 解决PC串流至IPad Pro时由于分辨率不一致导致的黑边问题和鼠标滚轮反转问题
  • 印章/公章识别:PaddleX下的“Seal-Recognition”模型
  • 【从零开始学习计算机科学】算法分析(二)排序算法 与 分治法
  • 公司网站费怎么做分录/站长统计app下载大全
  • 北京公司网站建/百度榜单
  • 一级做爰片a视频网站试看/百度网址大全怎么设为主页
  • 东营网站建设制作/网络营销的模式有哪些
  • 哪个cms方便快速建站/淘大象关键词排名查询
  • 内丘企业做网站/头条站长平台