java代码构建二叉树(二叉查找树)

1. 前言

1.1 二叉树定义

二叉树是N个结点的有限集合,该集合或者为空集,或者由一个根节点跟两棵互不相交的、分别称为根节点的左子树或者右子树的二叉树组成。

1.2 二叉树的特点
  • 每个结点最多有两个子树
  • 左子树跟右子树是有序的
  • 树中某个结点只有一棵子树,也要区分是左子树还是右子树
1.3 二叉树的形态
  • 空二叉树

  • 只有一个根结点

  • 根结点只有左子树

  • 根结点只有右子树

  • 根结点既有左子树,又有右子树

2. java构建二叉树代码示例

2.1 二叉树的存储结构

以二叉链表存储为例
在这里插入图片描述

2.2 示例

以下是构建一个普通二叉树的代码,根结点的左叶子结点会小于根结点,右叶子结点反之。

public class BinaryTree {

	//根结点,默认为null
	private Node root = null;

	public Node getRoot() {
		return root;
	}

	//通过内部类,构建结点
	private class Node{
		//左节点
		private Node left;
		//数据域
		private int data;
		//右节点
		private Node right;

		public Node(int data) {
			this.data = data;
		}

		public Node getLeft() {
			return left;
		}

		public void setLeft(Node left) {
			this.left = left;
		}

		public int getData() {
			return data;
		}

		public void setData(int data) {
			this.data = data;
		}

		public Node getRight() {
			return right;
		}

		public void setRight(Node right) {
			this.right = right;
		}
	}


	/**
	 * 创建人:贺小五
	 * 创建时间:2017-09-16 00:54:52
	 * 描述:
	 * 		构建二叉树
	 * 	    Node 为结点,
	 * 	    data 为数据
	 */
	private void buildBiTree(Node node,int data){
		//如果根结点是空,那么设置根结点,并且设置数据域
		if(root == null){
			root = new Node(data);
		}else{
			/**
			 * 根结点不为空,那么判断数据是否小于当前结点的数据
			 */
			if(data<node.getData()){
				//如果小于,判断当前结点是否有左叶子结点
				if(node.getLeft()==null){
					//左叶子结点为空,设置左叶子结点,并且设置数据
					node.setLeft(new Node(data));
				}else{
					//左叶子结点不为空,递归调用构建二叉树的函数
					buildBiTree(node.getLeft(),data);
				}
			}else{
				//如果大于或等于,判断当前结点是否存在右叶子结点
				if(node.getRight()==null){
					//右叶子结点为空,设置右叶子结点,并且设置数据域
					node.setRight(new Node(data));
				}else{
					//右叶子几点不为空,递归调用构建二叉树的函数
					buildBiTree(node.getRight(),data);
				}
			}
		}
	}

	/**
	 * 创建人:贺小五
	 * 创建时间:2017-09-16 01:01:30
	 * 描述:
	 * 		创建二叉树函数
	 * 		int[] 是个int类型的数组
	 * 		通过循环调用,往二叉树插入数据
	 */
	public static BinaryTree createBiTree(int[] datas){
		BinaryTree binaryTree = new BinaryTree();
		for (int data : datas) {
			binaryTree.buildBiTree(binaryTree.getRoot(),data);
		}

		return binaryTree;
	}
}

然后我们上一段测试代码,往该树插入数据:

	public static void main(String[] args) {

		int[] datas = {72,37,29,55,51,80};


		BinaryTree biTree = BinaryTree.createBiTree(datas);

	}

执行测试代码后,结构应该是如下图(测试的同学可以debug 看树的结构)
在这里插入图片描述

  • 6
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值