算法与数据结构 - 二叉树

二叉树  

Binary Tree  二分树  二元树  

二叉树的递归定义:或是空树,或是一棵由一个根结点和左右子树组成的树,且左右子树也是二叉树。

分枝结点:除叶结点以外的结点。

二叉树的性质

最多 2^h - 1 个结点

N2 = N0 - 1

满二叉树:所有分枝结点都存在左右子树,且叶结点都在同一层。

完全二叉树:除最后一层外,所有层的结点数都达到最大个数,且最后一层的结点都连续集中在最左边。

二叉查找树:左子树所有节点的值 < 根的值 < 右子树所有节点的值,且左右子树也是二叉查找树。


class Node {
	public int data;
	public Node left;
	public Node right;
	public Node(int data){
		this.data = data;
		this.left = null;
		this.right = null;
	}
}

class BinaryTree{
	
	public Node root;
	
	public BinaryTree(){
		root = null;
	}
	
	public void insert(int data){ // 添加节点
		Node node = new Node(data);
		if(root == null){
			root = node;
			return;
		}
		Node curNode = root;
		while(true){ // 直到找到空位置
			if(data < curNode.data){ // 小于根找左子树
				if(curNode.left == null){ // 有空位置就放入
					curNode.left = node;
					return;
				}
				else
					curNode = curNode.left; // 移位
			}
			else{
				if(curNode.right == null){
					curNode.right = node;
					return;
				}
				else
					curNode = curNode.right; // 移位
			}
		}
	}
	
	public void inOrder(Node node){ // 中序遍历
		if(node == null)
			return;
		inOrder(node.left); // 左
		System.out.print(node.data + " "); // 根
		inOrder(node.right); // 右
	}
	
	public void preOrder(Node node){ // 先序遍历
		if(node == null)
			return;
		System.out.print(node.data + " "); // 根
		preOrder(node.left); // 左
		preOrder(node.right); // 右
	}
	
	public void postOrder(Node node){ //后序遍历
		if(node == null)
			return;
		postOrder(node.left); // 左
		postOrder(node.right); // 右
		System.out.print(node.data + " "); // 根
	}
	
}

public class Test {
	public static void main(String[] args) {
		BinaryTree  bt = new BinaryTree();
		int[] a = {8,3,10,1,6,14,4,7,13};
		for(int i=0;i<a.length;i++)
			bt.insert(a[i]);
		System.out.println("中序遍历(左根右)");
		bt.inOrder(bt.root);
		System.out.println();
		System.out.println("先序遍历(根左右)");
		bt.preOrder(bt.root);
		System.out.println();
		System.out.println("后序遍历(左右根)");
		bt.postOrder(bt.root);
	}
}

程序中数组对应的二叉查找树

Console

中序遍历:左根右
1 3 4 6 7 8 10 13 14 
先序遍历:根左右
8 3 1 6 4 7 10 14 13 
后序遍历:左右根
1 4 7 6 3 13 14 10 8 



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值