森林、樹、二叉樹學習小結

1.樹和森林

樹是一種基本的數據結構。一棵樹只有一個根結點。可以沒有或有多個子結點。每個子結點以及子結點以下的結點又組成了一棵樹,叫做子樹。在一棵樹結構中,只有父結點,沒有子結點的結點叫做葉子結點

森林是多棵互不相交的樹的集合。對樹中的每個結點而言,其子樹的集合就是森林。

 

 

 

2.二叉樹

二叉樹是另一種樹型結構,它的特點是每個結點至多隻有兩棵子樹,並且二叉樹中的子樹還有左右之分,它們的次序不能顛倒。

 

 

 

3.二叉樹結點的表示

Class Node{

        private Object data; //結點中存儲的數據

        private Node parent; //父結點的引用

        private Node lChild; //左結點的引用

        private Node rChild; //右結點的引用

}

 

 

 

4.二叉樹的性質

        1.在二叉樹的第i層上至多有2^(i-1)個結點(i>=1)

        2.深度爲k的二叉樹至多有(2^k)-1個結點(k>=1)       

        3.對任何一棵二叉樹,如果其終端節點數爲n0,度爲2的結點數爲n2,n0=n2+1.

                n1爲度爲1的結點樹,則總結點數n=n0+n1+n2

                根據度與結點的對應關係有n=n1+2*n2+1(1表示一個根結點)

                兩式結合有n0=n2+1

4.具有n個結點的完全二叉樹的深度是[]+1

完全二叉樹形象的理解是它的上一層是滿二叉樹,而下一層要求右側的孩子節點可以也只可以連續缺少,但是左側不能缺少。性質4的證明如下:

假設深度爲k,則該二叉樹爲滿二叉樹時結點最多爲(2^k)-1,最少的情況是最後一層只有一個結點爲2^(k-2)+1。則2^(k-2)+1<=n<=(2^k)-1,<k<=+1,因爲k是整數所以k=[]+1.

 

 

5.二叉排序樹的建立和遍歷

二叉排序樹具有如下性質:1)左子樹上所有結點的值均小於根結點的值2)右子樹上所有結點的值均不小於根結點的值3)左右子樹也分別是二叉排序樹

建立二叉排序樹的代碼如下:

/**

 * 將一個整型數組存儲在一個查找二叉樹中

 * @param array 被存儲的數組

 * @return 查找二叉樹的根節點

 */

public TreeNode arrayToTree(int[] array) {

        TreeNode root = new TreeNode(array[0]);

 

        for (int i = 1; i < array.length; i++) {

                TreeNode node = new TreeNode(array[i]);

                insertNode(node, root);

        }

 

        return root;

}

private void insertNode(TreeNode node, TreeNode root) {

 

    if ((Integer) node.getObj() < (Integer) root.getObj()) {

        if (root.getLchild() == null){

            root.setLchild(node);

        }else

            insertNode(node, root.getLchild());

    else {

        if (root.getRchild() == null){

            root.setRchild(node);

        }else

            insertNode(node, root.getRchild());

    }

}

<!--EndFragment-->

 

 

遍歷排序二叉樹的代碼如下:

/**

   * 中序遍歷二叉樹

   * @param root  二叉樹的根節點

   */

public void traverseTree(TreeNode root) {

    if (root != null) {

        int data = (Integer) root.getObj();

 

        traverseTree(root.getLchild());

 

        System.out.println(data);

 

        traverseTree(root.getRchild());

    }

}

<!--EndFragment-->
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章