數據結構及算法基礎--樹(Tree)(一)基礎詳解


我們在前面介紹了很多典型的線性結構,如隊列,堆棧,數組,她們至多只有一個尾節點。這是非常容易理解的。

下面我們要來介紹一個非線性結構,樹(tree):

樹不在是一對一的數據結構,而是一對多的非線性連接:

shixin tai shuai le

 

這里有幾個規定:

  • 圖中的結構就像一棵倒過來的樹,最頂部的節點就是“根節點 (root 節點)
  • 每棵樹至多只有一個根節點
  • 根節點生出多個孩子節點,每個孩子節點只有一個父節點,每個孩子節點又生出多個孩子
  • 父親節點 (parent) 和孩子節點 (child) 是相對的
  • 沒有孩子節點的節點成為葉子節點 (leaf)

樹的相關術語:

shixinzhang

 

1)節點的度:

  一個節點直接含有的子樹個數,上圖中3的度為2,10的度為1;

2)樹的度:

  一個樹里面節點的度的最大值。例如上圖的樹的度為2;

3)節點的層次:

  從根節點開始算起,根節點算第一層,上圖中3為第二層,13為第四層;

4)樹的高度:

  從葉節點開始,從下往上增加;

5)樹的深度:

  從根節點開始,從上往下增加;

 

上看給出的信息是非常非常重要的,一定要熟練掌握。

 

由上述描述,我們一般可以通過兩種方式實現一棵簡單的樹:

1)數組實現。

package treeTest;

public class TreeNodebyArray<item> {
    private item mData;
    private int mParent;
    
    public TreeNodebyArray(item data,int parent){
        mData=data;
        mParent=parent;
    }
    
    public item getData(){
        return mData;
    }
    
    public int getMParent(){
        return mParent;
    }
    
    public void setData(item data){
        mData=data;
    }
    
    public void setParent(int parent){
        mParent=parent;
    }
    public static void main(String[] args){
                TreeNode[] arrayTree = new TreeNode[10];
        }
}
            

 

2)鏈表實現:

package treeTest;

public class TreeNodebyLinkList<item> {
    private item mData;
    private TreeNodebyLinkList parent;
    private TreeNodebyLinkList kid;
    
    public TreeNodebyLinkList(item data,TreeNodebyLinkList parent){
        mData=data;
        this.parent=parent;
    }
    
    public item getData() {
        return mData;
    }

    public void setData(item data) {
        mData = data;
    }

    public TreeNodebyLinkList getParent() {
        return parent;
    }

    public void setParent(TreeNodebyLinkList parent) {
        this.parent = parent;
    }

    public TreeNodebyLinkList getChild() {
        return kid;
    }

    public void setChild(TreeNodebyLinkList kid) {
        this.kid = kid;
    }

    public static void main(String[] args){
        LinkedList<LinkedTreeNode> linkedTree = new LinkedList<>();
    }
}

 

 

當然,根據不同的樹的要求,我們需要在一定程度上更改樹內部的結構,所以實現代碼也會不同。上述代碼知識考慮了一種情況。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM