java数据结构-二分树和二分搜索的理解 添加元素、搜索元素学习笔记(一)

二叉树(和链表一样都是动态数据结构)

二叉树具有天然递归结构

每个节点的左子树也是二叉树

每个节点的右子树也是二叉树

二叉树不一定是"满"的

二分搜索树(存储的元素必须有可比较性)

二分树的节点创建

代码我分开这样 更好让人理解,

package com.binglian.BST;

import java.awt.image.RescaleOp;
import java.util.Stack;

/**
 * 二分树(递归实现)
 * 
 * e.compareTo(node.e)返回值 。
 * 如果指定的数与参数相等返回0
 * 如果指定的数小于参数返回 -1
 * 如果指定的数大于参数返回 1。
 * @author binglian
 *
 */
public class BST<E extends Comparable<E>> {

	/**
	 * 节点
	 * @author binglian
	 *
	 */
	private class Node{
		public  E e;
		public Node left,right;
		
		public Node(E e){
			this.e=e;
			left=null;
			right=null;
		}
		
		
	}

	private Node root;
	private int size;
	
	public BST(){
		root=null;
		size=0;
	}
	
	public int size(){
		return size;
	}
	
	public boolean isEmpty(){
		return size ==0;
	}
}

二分树添加元素

创建一个public,让外部进行调用,在创建一个private进行内部调用,public调用private

//向二分搜索树中添加新的元素e
	public void add(E e){
		root=add(root, e);
	}
	
	//向以node为根的二分搜索树中插入元素e,递归算法
	//返回插入新节点后二分搜索树的根
	private Node add(Node node,E e){
		if(node == null){
			size++;
			return new Node(e);
		}
		
		if(e.compareTo(node.e) <0)
			node.left=add(node.left, e);
		else if(e.compareTo(node.e) >0)
			node.right=add(node.right, e);
		return node;
	}

 

二分树搜索

//看二分搜索树中是否包含元素e
	public boolean contains(E e){
		return contains(root,e);
	}
	
	//看以node为根的二分搜索树中是否包含元素e,递归算法
	private boolean contains(Node node,E e){
		if(node == null)
			return false;
		
		if(e.compareTo(node.e) == 0)
			return true;
		else if(e.compareTo(node.e) <0)
			return contains(node.left,e);
		else//e.compareTo(node.e)>0
			return contains(node.right,e);
			
	}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值