二叉樹實現 java 版

來源:互聯網
上載者:User

剛看完二叉樹的資料結構,自己用java寫了下

Node.java

package test;

public class Node<E> {
    Node<E> Lnode;
    Node<E> Rnode;
    E e;
    public Node<E> getLnode() {
        return Lnode;
    }
    public void setLnode(Node<E> lnode) {
        Lnode = lnode;
    }
    public Node<E> getRnode() {
        return Rnode;
    }
    public void setRnode(Node<E> rnode) {
        Rnode = rnode;
    }
    public E getE() {
        return e;
    }
    public void setE(E e) {
        this.e = e;
    }
    
}

preOrderTree.java

package test;

import java.util.ArrayList;
import java.util.List;

/**
 * 先序遍曆的增刪改查
 *  **/
public class preOrderTree<E> {

    private Node<E> node;
    
    /** 父節點 **/
    private Node<E> prenode;
    /** 當前節點 **/
    private Node<E> curnode;

    
    /** 節點刪除  後序遍曆 **/
    boolean delete(E e) {
        // TODO Auto-generated method stub
        Node<E> delnode=findByValue(node,e);
        
        return false;
    }
    /**
     * node原根部節點
     * 從bgnode節點開始刪除
     *
     * 傳回型別:刪除後的Node
     *  遍曆刪除指定節點後面的節點  後續遍曆 **/
    public Node<E> delNodes(Node<E> node,Node<E> bgnode)
    {
        while(node.Lnode!=null)
        {
            node=node.Lnode;
            prenode=node;
        }
        return node;
    }
    
    
    /** 得到節點值為e的第一個節點 **/
    public Node<E> findByValue(Node<E> node,E e)
    {
        if(node.e==e)
        {
            return node;
        }else if(node.Lnode!=null&&!node.Lnode.equals(e))
        {
            return findByValue(node.Lnode, e);
        }else if(node.Rnode!=null&&!node.Rnode.equals(e))
        {
            return findByValue(node.Rnode, e);
        }else if(node.Lnode!=null&&node.Lnode.equals(e)){
            return node.Lnode;
        }else if(node.Rnode!=null&&node.Rnode.equals(e))
        {
            return node.Rnode;
        }
        return null;
    }
    
    
    
    /**
     * 尋找Node節點之後的所有子節點集合并返回,若無則返回null **/
    public List<E> findByNodeList(Node<E> node)
    {
        List<E> list = new ArrayList<E>();
        list.add(node.e);
        return prenode(list, node);
    }
    
    void update(E e1, E e2) {
        // TODO Auto-generated method stub

    }
    
    
    
    
    public preOrderTree() {
        node = new Node<E>();
    }
    public Node<E> getNode() {
        return node;
    }

    
    /***************************************************************************
     * 根節點遍曆
     **************************************************************************/
    public List<E> prenode(List<E> list, Node<E> node) {
        if (node.Lnode != null) {
            list.add(node.Lnode.e);
            prenode(list, node.Lnode);
        }
        if(node.Rnode != null)
        {
            list.add(node.Rnode.e);
            prenode(list, node.Rnode);
        }
        return list;
    }

    /** 遍曆出二叉樹的所有元素 **/
    public List<E> listNode() {
        List<E> list = new ArrayList<E>();
        list.add(node.e);
        return prenode(list, node);
    }
    
    
    boolean isFind(E e) {
        // TODO Auto-generated method stub
        List<E> lists=listNode();
        for(int i=0;i<lists.size();i++)
        {
            if(lists.get(i).equals(e))
            {
                return true;
            }
        }
        return false;
    }
    
    
    void insert(E e) {
        insert(node,e);
    }
    /** 插入 **/
    void insert(Node<E> node,E e)
    {
        if (node.e == null) {
            node.e = e;
        } else if (node.Lnode== null) {
            node.Lnode=new Node<E>();
            insert(node.Lnode,e);
        } else if(node.Lnode==null){
            node.Rnode=new Node<E>();
            insert(node.Rnode,e);
        }else{
            insert(node.Lnode,e);
        }
    }
    
    public E getParent(E e)
    {
        boolean flag=true;
        curnode=node;
//        prenode=node;
        if(node.e==e)
        {
            return null;
        }
        while(flag)
        {
            if(curnode.Lnode!=null&&curnode.Lnode.e!=e)
            {
//                prenode=curnode;
                curnode=curnode.Lnode;
            }else if(curnode.Lnode!=null&&curnode.Lnode.e==e)
            {
                return curnode.e;
            }else if(curnode.Rnode!=null&&!curnode.Rnode.equals(e))
            {
//                prenode=curnode;
                curnode=curnode.Rnode;
            }else if(curnode.Rnode!=null&&curnode.Rnode.equals(e))
            {
                return curnode.e;
            }else{
                return null;
            }
        }
        return null;
    }
}

TreeTest.java

package test;

import java.util.List;

public class TreeTest {
    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        preOrderTree<Character> trees=new preOrderTree<Character>();
        String test=new String("abcdefghijklmn");
        for(int i=0;i<test.length();i++)
        {
            trees.insert(test.charAt(i));
        }
        List<Character> list=trees.listNode();
        for(char k:list)
        {
            System.out.println(k);
        }
        System.out.println(trees.getParent('p'));
    }
}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.