首頁 Java java教程 如何用java實作二元樹的構建

如何用java實作二元樹的構建

Apr 03, 2017 am 10:15 AM
二元樹

目錄: 

1.把一個數組的值賦值給一顆二元樹 

2.具體程式碼 

注意:

1. 父節點陣列下標從0到n/2 -1 ,但是遍歷時要小於n/2-1,因為最後一個父節點可能沒有右孩子,當n/2-1為奇數時才有右孩子,為偶數時只有左孩子。左孩子下標為2n+1,右孩子下標為2n+2。

#2.具體程式碼

 

package tree;  
  
import java.util.LinkedList;  
import java.util.List;  
  
/** 
 * 功能:把一个数组的值存入二叉树中,然后进行3种方式的遍历 
 *  
 * 参考资料0:数据结构(C语言版)严蔚敏 
 *  
 * 参考资料1:http://zhidao.baidu.com/question/81938912.html 
 *  
 * 参考资料2:http://cslibrary.stanford.edu/110/BinaryTrees.html#java 
 *  
 * @author ocaicai@yeah.net @date: 2011-5-17 
 *  
 */  
public class BinTreeTraverse2 {  
  
    private int[] array = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };  
    private static List<Node> nodeList = null;  
  
    /** 
     * 内部类:节点 
     *  
     * @author ocaicai@yeah.net @date: 2011-5-17 
     *  
     */  
    private static class Node {  
        Node leftChild;  
        Node rightChild;  
        int data;  
  
        Node(int newData) {  
            leftChild = null;  
            rightChild = null;  
            data = newData;  
        }  
    }  
  
    public void createBinTree() {  
        nodeList = new LinkedList<Node>();  
        // 将一个数组的值依次转换为Node节点  
        for (int nodeIndex = 0; nodeIndex < array.length; nodeIndex++) {  
            nodeList.add(new Node(array[nodeIndex]));  
        }  
        // 对前lastParentIndex-1个父节点按照父节点与孩子节点的数字关系建立二叉树  
        for (int parentIndex = 0; parentIndex < array.length / 2 - 1; parentIndex++) {  
            // 左孩子  
            nodeList.get(parentIndex).leftChild = nodeList  
                    .get(parentIndex * 2 + 1);  
            // 右孩子  
            nodeList.get(parentIndex).rightChild = nodeList  
                    .get(parentIndex * 2 + 2);  
        }  
        // 最后一个父节点:因为最后一个父节点可能没有右孩子,所以单独拿出来处理  
        int lastParentIndex = array.length / 2 - 1;  
        // 左孩子  
        nodeList.get(lastParentIndex).leftChild = nodeList  
                .get(lastParentIndex * 2 + 1);  
        // 右孩子,如果数组的长度为奇数才建立右孩子  
        if (array.length % 2 == 1) {  
            nodeList.get(lastParentIndex).rightChild = nodeList  
                    .get(lastParentIndex * 2 + 2);  
        }  
    }  
  
    /** 
     * 先序遍历 
     *  
     * 这三种不同的遍历结构都是一样的,只是先后顺序不一样而已 
     *  
     * @param node 
     *            遍历的节点 
     */  
    public static void preOrderTraverse(Node node) {  
        if (node == null)  
            return;  
        System.out.print(node.data + " ");  
        preOrderTraverse(node.leftChild);  
        preOrderTraverse(node.rightChild);  
    }  
  
    /** 
     * 中序遍历 
     *  
     * 这三种不同的遍历结构都是一样的,只是先后顺序不一样而已 
     *  
     * @param node 
     *            遍历的节点 
     */  
    public static void inOrderTraverse(Node node) {  
        if (node == null)  
            return;  
        inOrderTraverse(node.leftChild);  
        System.out.print(node.data + " ");  
        inOrderTraverse(node.rightChild);  
    }  
  
    /** 
     * 后序遍历 
     *  
     * 这三种不同的遍历结构都是一样的,只是先后顺序不一样而已 
     *  
     * @param node 
     *            遍历的节点 
     */  
    public static void postOrderTraverse(Node node) {  
        if (node == null)  
            return;  
        postOrderTraverse(node.leftChild);  
        postOrderTraverse(node.rightChild);  
        System.out.print(node.data + " ");  
    }  
  
    public static void main(String[] args) {  
        BinTreeTraverse2 binTree = new BinTreeTraverse2();  
        binTree.createBinTree();  
        // nodeList中第0个索引处的值即为根节点  
        Node root = nodeList.get(0);  
  
        System.out.println("先序遍历:");  
        preOrderTraverse(root);  
        System.out.println();  
  
        System.out.println("中序遍历:");  
        inOrderTraverse(root);  
        System.out.println();  
  
        System.out.println("后序遍历:");  
        postOrderTraverse(root);  
    }  
  
}
登入後複製
輸出結果: 
先序遍历:  
1 2 4 8 9 5 3 6 7   
中序遍历:  
8 4 9 2 5 1 6 3 7   
后序遍历:  
8 9 4 5 2 6 7 3 1
登入後複製

以上是如何用java實作二元樹的構建的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

在C語言中列印二元樹的左視圖 在C語言中列印二元樹的左視圖 Sep 03, 2023 pm 01:25 PM

任務是列印給定二元樹的左節點。首先,使用者將插入數據,從而生成二元樹,然後列印所形成的樹的左側視圖。每個節點最多可以有2個子節點,因此這裡程式必須僅遍歷與節點關聯的左指針如果左指針不為空,則表示它將有一些與之關聯的資料或指針,否則它將是要列印並顯示為輸出的左子級。範例Input:10324Output:102這裡,橘色節點代表二元樹的左邊視圖。在給定的圖中,資料為1的節點是根節點,因此它將被列印,而不是轉到左子節點,它將列印0,然後它將轉到3並列印其左子節點,即2 。我們可以使用遞歸方法來儲存節點的級

Java中的二元樹結構詳解 Java中的二元樹結構詳解 Jun 16, 2023 am 08:58 AM

二元樹是計算機科學中常見的資料結構,也是Java程式設計中常用的資料結構。本文將詳細介紹Java中的二元樹結構。一、什麼是二元樹?在電腦科學中,二元樹是一種樹狀結構,每個節點最多有兩個子節點。其中,左側子節點比父節點小,右側子節點比父節點大。在Java程式設計中,常用二元樹表示排序,搜尋以及提高對資料的查詢效率。二、Java中的二元樹實作在Java中,二元樹

在C語言中,將二元樹的右側視圖列印出來 在C語言中,將二元樹的右側視圖列印出來 Sep 16, 2023 pm 11:13 PM

任務是列印給定二元樹的右節點。首先使用者將插入資料以建立二元樹,然後列印所形成的樹的右視圖。上圖展示了使用節點10、42、93、14、35、96、57和88建立的二元樹,其中選擇並顯示在樹的右側的節點。例如,10、93、57和88是二元樹的最右節點。範例Input:1042931435965788Output:10935788每個節點都有兩個指針,即左指針和右指針。根據這個問題,程式只需遍歷右節點。因此,不需要考慮節點的左子節點。右視圖儲存了所有那些是其所在層級的最後一個節點的節點。因此,我們可以

如何使用Python實作二元樹的遍歷 如何使用Python實作二元樹的遍歷 Jun 09, 2023 pm 09:12 PM

作為一種常用的資料結構,二元樹經常被用來儲存資料、搜尋和排序。遍歷二元樹是非常常見的操作之一。 Python作為一種簡單易用的程式語言,有許多方法可以實作二元樹的遍歷。本文將介紹如何使用Python實現二元樹的前序、中序和後序遍歷。二元樹的基礎在學習二元樹的遍歷之前,我們需要先了解二元樹的基本概念。二元樹由節點組成,每個節點都有一個值和兩個子節點(左子節點和右子

二元樹中等腰三角形的數量 二元樹中等腰三角形的數量 Sep 05, 2023 am 09:41 AM

二元樹是一種資料結構,其中每個節點最多可以有兩個子節點。這些孩子分別稱為左孩子和右孩子。假設我們得到了一個父數組表示,您必須使用它來建立一棵二元樹。二元樹可能有幾個等腰三角形。我們必須找到該二元樹中可能的等腰三角形的總數。在本文中,我們將探討幾種在C++中解決這個問題的技術。理解問題給你一個父數組。您必須以二元樹的形式表示它,以便數組索引形成樹節點的值,而數組中的值給出該特定索引的父節點。請注意,-1始終是根父節點。下面給出的是一個數組及其二元樹表示。 Parentarray=[0,-1,3,1,

Java二元樹實作及具體應用案例詳解 Java二元樹實作及具體應用案例詳解 Jun 15, 2023 pm 11:03 PM

Java二元樹實作及具體應用案例詳解二元樹是一種經常在電腦科學中使用的資料結構,可以進行非常有效率的查找和排序操作。在本文中,我們將討論Java中如何實作二元樹及其一些具體應用案例。二元樹的定義二元樹是一種非常重要的資料結構,由根節點(樹頂節點)和若干個左子樹和右子樹組成。每個節點最多有兩個子節點,左邊的子節點稱為左子樹,右邊的子節點稱為右子樹。如果節點沒有

PHP中的二元樹演算法及常見問題解答 PHP中的二元樹演算法及常見問題解答 Jun 09, 2023 am 09:33 AM

隨著Web開發的不斷發展,PHP作為一種廣泛使用的伺服器腳本語言,其演算法和資料結構也越來越重要。在這些演算法和資料結構中,二元樹演算法是一個非常重要的概念。本文將介紹PHP中的二元樹演算法及其應用,以及常見問題的解答。什麼是二元樹?二元樹是一種樹狀結構,其中每個節點最多有兩個子節點,分別為左子節點和右子節點。如果節點沒有子節點,則稱為葉子節點。二元樹通常用於搜索

PHP實作二元樹的方式與應用 PHP實作二元樹的方式與應用 Jun 18, 2023 pm 06:28 PM

在電腦科學中,二元樹是一種重要的資料結構。它由節點和指向它們的邊組成,每個節點最多連接兩個子節點。二叉樹的應用廣泛,例如搜尋演算法、編譯器、資料庫、記憶體管理等領域。許多程式語言都支援二元樹資料結構的實現,其中PHP是其中之一。本文將介紹PHP實作二元樹的方式以及其應用。二元樹的定義二元樹是一種資料結構,它由節點和指向它們的邊組成。每個節點最多連接兩個子節點,

See all articles