樹的遍曆

來源:互聯網
上載者:User

之前的工作都沒有接觸到樹,也就很少研究它。幸運地的是,在目前的工作中多次遇到樹型結構的資料,那麼訪問樹節點中的資料就是必然的了,而且還需要按照指定規則對節點中的資料進行額外處理。經過學習之後,對與樹相關的基本演算法有了一些認知,就計劃寫幾篇小文。其實這樣的文章早已是汗牛充棟,而我只是把它當作我的學習總結罷了,以加深記憶與理解,如能對其他朋友有所助益,則更感愉悅了 :-) (2009.04.01最後更新)

這次先從最基礎的開始--樹的遍曆。本文使用了兩種極常用的方法來遍曆樹中的所有節點--遞迴;迭代,但它們實現的都是深度優先(Depth-First)演算法。

1. 樹節點與資料

先定義樹節點及資料(使用者物件),並建立測試用的資料。

TreeNode是樹節點的定義。

/** * 樹節點的定義。 */public interface TreeNode {    /**     * 擷取指定下標處的子節點。     *      * @param index     *            下標。     * @return 子節點。     */    public TreeNode getChildAt(int index);    /**     * 返回指定子節點的下標。     *      * @param index     *            下標。     * @return 子節點。     */    public int getChildIndex(TreeNode index);    /**     * 擷取子節點的數量。     *      * @return 子節點的數量。     */    public int getChildCount();    /**     * 返回父節點。     *      * @return 父節點。     */    public TreeNode getParent();    /**     * 設定父節點。註:此處不需要改變父節點中的子節點元素。     *      * @param parent     *            父節點。     */    public void setParent(TreeNode parent);    /**     * 擷取所有的子節點。     *      * @return 子節點的集合。     */    public List<?> getChildren();    /**     * 是否為分葉節點。     *      * @return 是分葉節點,返回true;否則,返回false。     */    public boolean isLeaf();}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.