二叉搜索树的特点:
1、父节点的值大于左子树的值;父节点的值小于等于右子树
树的遍历方式:
1、先序遍历:先序遍历根节点,然后遍历左子树,最后遍历右子树
2、中序遍历:中序遍历左子树,然后遍历根节点,最后遍历右子树
3、后序遍历:后序遍历左子树,然后遍历右子树,最后遍历根节点
代码实现:
package com.phome.mapdemo.treedemo;
public class BinarySearchTree {
// 定义一个二叉树节点
private BinaryTree binaryTree;
// 二叉树中总共有几个节点
private int size;
public int getSize() {
return size;
}
public BinaryTree getBinaryTree() {
return binaryTree;
}
// 插入元素(默认)
public void add(int data){
// 如果二叉树的父节点是空的则初始化一个二叉树
BinaryTree newTree = new BinaryTree(data,null,null,null);
if (binaryTree == null){
binaryTree = newTree;
size++;
return;
}
BinaryTree parent = binaryTree;
BinaryTree root = null;
while(true){
if (parent == null)
break;
root = parent;
if(data < parent.data){
parent = parent.left;
}else {
parent = parent.right;
}
}
if (data < root.data){
root.left = newTree;
size++;
}else {
root.right = newTree;
size++;
}
}
// 先序遍历
public void prePrintTree(BinaryTree binaryTree){
if(binaryTree != null){
System.out.print(binaryTree.data+" ");
prePrintTree(binaryTree.left);
prePrintTree(binaryTree.right);
}
}
// 中序遍历
public void inOrderPrintTree(BinaryTree binaryTree){
if(binaryTree != null){
inOrderPrintTree(binaryTree.left);
System.out.print(binaryTree.data + " ");
inOrderPrintTree(binaryTree.right);
}
}
// 后序遍历
public void postOrderPrintTree(BinaryTree binaryTree){
if(binaryTree != null){
postOrderPrintTree(binaryTree.left);
postOrderPrintTree(binaryTree.right);
System.out.print(binaryTree.data + " ");
}
}
public static void main(String[] args) {
BinarySearchTree binarySearchTree = new BinarySearchTree();
binarySearchTree.add(10);
binarySearchTree.add(9);
binarySearchTree.add(11);
binarySearchTree.add(3);
binarySearchTree.add(5);
binarySearchTree.add(8);
binarySearchTree.add(2);
System.out.println("数的节点:"+binarySearchTree.getSize());
System.out.println("先序遍历:");
binarySearchTree.prePrintTree(binarySearchTree.getBinaryTree());
System.out.println();
System.out.println("中序遍历:");
binarySearchTree.inOrderPrintTree(binarySearchTree.getBinaryTree());
System.out.println();
System.out.println("后序遍历:");
binarySearchTree.postOrderPrintTree(binarySearchTree.getBinaryTree());
}
}
class BinaryTree{
public int data;
public BinaryTree parent;
public BinaryTree left;
public BinaryTree right;
public BinaryTree(int data, BinaryTree parent, BinaryTree left, BinaryTree right) {
this.data = data;
this.parent = parent;
this.left = left;
this.right = right;
}
public BinaryTree() {
this(0,null,null,null);
}
@Override
public String toString() {
return "data:["+data+"]";
}
}
执行结果:
数的节点:7
先序遍历:
10 9 3 2 5 8 11
中序遍历:
2 3 5 8 9 10 11
后序遍历:
2 8 5 3 9 11 10