什么是二叉排序树:二叉排序树或者是一颗空树,或者具有以下性质的二叉树:
(1)若它的左子树不为空,则左子树上的所有节点的值都小于他的父节点的值;
(2)若它的右子树不为空,则右子树上的所有节点的值都大于他的父节点的值;
(3)它的左右子树也分别为二叉排序树;
java实例:
package com.test.linked;
public class HeapSort {
public class Node{
private int data;
private Node leftChildren;
private Node rightChildren;
public Node(int data){
this.data=data;
}
public String toString(){
return " "+data;
}
}
public Node root;
/**
* 插入结点
* @param in
*/
public void insert(Node in){
if(root==null){//当为空树时将结点当作根节点
root=in;
}else{
Node current=root;
Node parent;//当作parent
while(current!=null){//当循环到空时结束
parent=current;
if(in.data
current=current.leftChildren;
if(current==null){//当左边子节点为空意味着找到了要插入的位置
parent.leftChildren=in;
}
}else{//否则往右边走
current=current.rightChildren;
if(current==null){
parent.rightChildren=in;
}
}
}
}
}
/**
* 查找元素
* @param key
*/
public void find(int key){
Node current=root;
int deep=1;
if(current!=null){//判断根节点是否为空
while(current.data!=key){
if(key
current=current.leftChildren;
}else{
current=current.rightChildren;
}
deep++;//查找的结点在第几层;
if(current==null){
System.out.println("Node can't be found");
return;
}
}
System.out.println("this Node is :"+current+"at deep:"+deep);
}else{
System.out.println("this tree is null");
}
}
/**
* 遍历二叉树(在这里是先序遍历)利用递归自己遍历自己,直到所有节点都被遍历
* @param node
*/
public void display(Node node){
if(node!=null){
System.out.println(node.data);
display(node.leftChildren);
display(node.rightChildren);
}
}
public static void main(String[] args){
HeapSort sort=new HeapSort();
Node n1=sort.new Node(60);
Node n2=sort.new Node(50);
Node n3=sort.new Node(80);
Node n4=sort.new Node(20);
Node n5=sort.new Node(55);
Node n6=sort.new Node(62);
Node n7=sort.new Node(90);
sort.insert(n1);
sort.insert(n2);
sort.insert(n3);
sort.insert(n4);
sort.insert(n5);
sort.insert(n6);
sort.insert(n7);
sort.find(55);
sort.display(n1);
}
}