Data structure-simple implementation of binary search tree (Java)

Using the binary search tree can help us better understand the idea of ​​combining trees and sorting, and each traversal, whether it is iteration or recursion, will examine our logical thinking ability, or feel that we need to practice more and try to do it. .

SearchTreeNode 类

package 数据结构_二叉搜索树;

public class SearchTreeNode {
    
    
    private int element;
    private SearchTreeNode left,right;

    public SearchTreeNode(int element) {
    
    
        this.element = element;
        left = null;
        right = null;
    }

    public int getElement() {
    
    
        return element;
    }

    public void setElement(int element) {
    
    
        this.element = element;
    }

    public SearchTreeNode getLeft() {
    
    
        return left;
    }

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

    public SearchTreeNode getRight() {
    
    
        return right;
    }

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

Ordertree class

package 数据结构_二叉搜索树;

import 数据结构_二叉树.BinaryTreeNode;

public class Ordertree {
    
    
    /**
     * 前序遍历
     * @param root a root of preorder
     */
    public void preorder(SearchTreeNode root){
    
    
        if(root.getLeft() == null && root.getRight() == null){
    
    
            System.out.print(root.getElement()+" ");
            return;
        }
        else{
    
    
            System.out.print(root.getElement()+" ");
            if(root.getLeft() != null)
                preorder(root.getLeft());
            if(root.getRight() != null)
                preorder(root.getRight());
        }
    }

    /**
     * 中序遍历
     * @param root root a root of infixorder
     */
    public void infixorder(SearchTreeNode root){
    
    
        if(root.getLeft() == null && root.getRight() == null){
    
    
            System.out.print(root.getElement()+" ");
            return;
        }
        else{
    
    
            if(root.getLeft() != null)
                infixorder(root.getLeft());
            System.out.print(root.getElement()+" ");
            if(root.getRight() != null)
                infixorder(root.getRight());
        }
    }

    /**
     * 后序遍历
     * @param root root a root of postorder
     */
    public void postorder(SearchTreeNode root){
    
    
        if(root.getLeft() == null && root.getRight() == null){
    
    
            System.out.print(root.getElement()+" ");
            return;
        }
        else{
    
    
            if(root.getLeft() != null)
                postorder(root.getLeft());
            if(root.getRight() != null)
                postorder(root.getRight());
            System.out.print(root.getElement()+" ");
        }
    }
}

SearchLinkedTree 类

package 数据结构_二叉搜索树;

import 数据结构_二叉树.TraversalTree;

public class SearchLinkedTree {
    
    
    public SearchLinkedTree() {
    
    
    }
//添加元素方法,尝试了迭代遍历结点
    public void addElement(int element,SearchTreeNode node) {
    
    
        if (node == null)
            node.setElement(element);
        while (node != null) {
    
    
            if (element < node.getElement()) {
    
    
                if (node.getLeft() == null) {
    
    
                    node.setLeft(new SearchTreeNode(element));
                    System.out.println(element+"插到了"+node.getElement()+"左边");
                    break;
                }
                node = node.getLeft();
            } else {
    
    
                if (node.getRight() == null) {
    
    
                    node.setRight(new SearchTreeNode(element));
                    System.out.println(element+"插到了"+node.getElement()+"右边");
                    break;
                }
                node = node.getRight();
            }
        }
    }
  //删除结点元素方法,利用中序递归遍历。flag属性用来查看是否删除成功
    int flag = 0;
    public void removeElement(int element,SearchTreeNode root){
    
    
        if(root.getElement() == element){
    
    
            root.setElement(root.getRight().getElement());
            root.setRight(null);
            flag = 1;
        }
        if(root.getLeft() == null && root.getRight() == null){
    
    
            return;
        }
        else{
    
    
            if(root.getLeft() != null)
                removeElement(element,root.getLeft());
            if(root.getRight() != null)
                removeElement(element,root.getRight());
        }
    }
//生成order对象,用来遍历二叉搜索树
    public void order(SearchTreeNode root){
    
    
        Ordertree tra = new Ordertree();
        System.out.print("\n前序:");
        tra.preorder(root);
        System.out.print("\n中序:");
        tra.infixorder(root);
        System.out.print("\n后序:");
        tra.postorder(root);
    }
}

Test class

package 数据结构_二叉搜索树;

public class TEST {
    
    
    public static void main(String[] args) {
    
    
        SearchLinkedTree root = new SearchLinkedTree();
        SearchTreeNode node = new SearchTreeNode(3);
        
        root.addElement(5,node);
        root.addElement(2,node);
        root.addElement(7,node);
        root.addElement(1,node);
        root.addElement(4,node);

        root.order(node);
        root.removeElement(5,node);
        if(root.flag == 1){
    
    
            System.out.println("\n\n(Deleted successfully!!!)");
            root.order(node);
        }
        else
            System.out.println("\n\n(Sorry,not find this element!!!)");

    }
}

Guess you like

Origin blog.csdn.net/baldicoot_/article/details/104661943