[リソース構造]ツリー1-JAVA

13870 ワード


前に学んだリンクリストは、ハッシュも難しいが、木だけはもっと実現しにくいものの一つのようだ.😭 でも木を渡ると大関を渡るからがんばろう👊
木の数が膨大すぎるので、1と2に分けて整理しておきます.😘

バイナリツリー


:Branchは最大2つで、検索に非常に役立ちます.
public class hash{
    public Node root=null;
    public static void main(String[] args) {
        hash mytree=new hash();
        mytree.Insert(3);
        mytree.Insert(5);
        mytree.Insert(1);
        mytree.Insert(4);
        System.out.println(mytree.root.left.data);
        System.out.println(mytree.root.right.data);
        System.out.println(mytree.root.right.left.data);
    }

    public class Node{
        Integer data;
        Node left;
        Node right;

        Node(Integer data){
            this.data=data;
        }
    }

    /*트리에 노드추가*/
    public boolean Insert(Integer data) {
        //1. 아무 데이터도 없는 경우
        if (this.root == null) {
            this.root = new Node(data);
            return true;
        }
            //2. 데이터가 있는 경우
        else {
            Node CurrentNode = this.root;
            while(true){
                //왼쪽으로 이동
                if(data<CurrentNode.data){
                    if(CurrentNode.left==null){
                        CurrentNode.left=new Node(data);
                        break;
                    }
                    else
                        CurrentNode=CurrentNode.left;
                }
                //오른쪽으로 이동
                else{
                    if(CurrentNode.right==null){
                        CurrentNode.right=new Node(data);
                        break;
                    }
                    else
                        CurrentNode=CurrentNode.right;
                }
            }
            return true;
        }
    }

    public Integer BinarySearch(Integer data){
        if(root==null)
            return -1;
        else{
            Node CurrentNode=this.root;
            while(CurrentNode!=null) {
                //left로 가는 경우
                if(data<CurrentNode.data){
                    if(CurrentNode.left.data==data)
                        return CurrentNode.left.data;
                    else
                        CurrentNode=CurrentNode.left;
                }
                else{
                    if(CurrentNode.right.data==data)
                        return CurrentNode.right.data;
                    else
                        CurrentNode=CurrentNode.right;
                }
            }
            return -1;
        }
    }
}