Les caractéristiques de l'arbre de recherche binaire:
1. La valeur du nœud parent est supérieure à la valeur du sous-arbre de gauche; la valeur du nœud parent est inférieure ou égale au sous-arbre de droite
La façon de parcourir l'arbre:
1. Traversée du premier ordre: traversez d'abord le nœud racine, puis traversez le sous-arbre gauche, et enfin traversez le sous-arbre droit
2. Traversée d'ordre intermédiaire: l'ordre intermédiaire traverse le sous-arbre gauche, puis traverse le nœud racine, et enfin traverse le sous-arbre droit
3. Traversée post-ordre: post-ordre traverse le sous-arbre gauche, puis traverse le sous-arbre droit, et enfin traverse le nœud racine
Code:
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+"]";
}
}
Résultats de la:
数的节点:7
先序遍历:
10 9 3 2 5 8 11
中序遍历:
2 3 5 8 9 10 11
后序遍历:
2 8 5 3 9 11 10