二叉樹的建立與遍歷(java實現(xiàn))

原理:二叉樹是一種特殊的結構體,是n個節(jié)點的集合。下面以完全二叉樹為例唾戚,用java實現(xiàn)樹的建立和遍歷扳肛。

二叉樹.png

java代碼如下:

package 二叉樹;  
  
import java.util.LinkedList;  
import java.util.List;  

public class BinaryTree {  
  
    private int[] array = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };  
    private static List<Node> nodeList = null;  
  
    //用內部類定義二叉樹的節(jié)點
    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>();  
        // 將一個數(shù)組的值依次轉換為Node節(jié)點  
        for (int nodeIndex = 0; nodeIndex < array.length; nodeIndex++) {  
            nodeList.add(new Node(array[nodeIndex]));  
        }  
        // 對前l(fā)astParentIndex-1個父節(jié)點按照父節(jié)點與孩子節(jié)點的數(shù)字關系建立二叉樹  
        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);  
        }  
        // 最后一個父節(jié)點:因為最后一個父節(jié)點可能沒有右孩子,所以單獨拿出來處理  
        int lastParentIndex = array.length / 2 - 1;  
        // 左孩子  
        nodeList.get(lastParentIndex).leftChild = nodeList  
                .get(lastParentIndex * 2 + 1);  
        // 右孩子,如果數(shù)組的長度為奇數(shù)才建立右孩子  
        if (array.length % 2 == 1) {  
            nodeList.get(lastParentIndex).rightChild = nodeList  
                    .get(lastParentIndex * 2 + 2);  
        }  
    }  
  
    /** 
     * 先序遍歷 
     *  
     * 這三種不同的遍歷結構都是一樣的统求,只是先后順序不一樣而已 
     *  
     * @param node 
     *            遍歷的節(jié)點 
     */  
    public static void preOrderTraverse(Node node) {  
        if (node == null)  
            return;  
        System.out.print(node.data + " ");  
        preOrderTraverse(node.leftChild);  
        preOrderTraverse(node.rightChild);  
    }  
  
    /** 
     * 中序遍歷 
     *  
     * 這三種不同的遍歷結構都是一樣的检碗,只是先后順序不一樣而已 
     *  
     * @param node 
     *            遍歷的節(jié)點 
     */  
    public static void inOrderTraverse(Node node) {  
        if (node == null)  
            return;  
        inOrderTraverse(node.leftChild);  
        System.out.print(node.data + " ");  
        inOrderTraverse(node.rightChild);  
    }  
  
    /** 
     * 后序遍歷 
     *  
     * 這三種不同的遍歷結構都是一樣的据块,只是先后順序不一樣而已 
     *  
     * @param node 
     *            遍歷的節(jié)點 
     */  
    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) {  
        BinaryTree binTree = new BinaryTree();  
        binTree.createBinTree();  
        // nodeList中第0個索引處的值即為根節(jié)點  
        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);  
    }  
  
}  
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市折剃,隨后出現(xiàn)的幾起案子另假,更是在濱河造成了極大的恐慌,老刑警劉巖怕犁,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件边篮,死亡現(xiàn)場離奇詭異,居然都是意外死亡奏甫,警方通過查閱死者的電腦和手機戈轿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來阵子,“玉大人凶杖,你說我怎么就攤上這事】钪” “怎么了智蝠?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長奈梳。 經(jīng)常有香客問我杈湾,道長,這世上最難降的妖魔是什么攘须? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任漆撞,我火速辦了婚禮,結果婚禮上于宙,老公的妹妹穿的比我還像新娘浮驳。我一直安慰自己,他們只是感情好捞魁,可當我...
    茶點故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布至会。 她就那樣靜靜地躺著,像睡著了一般谱俭。 火紅的嫁衣襯著肌膚如雪奉件。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天昆著,我揣著相機與錄音县貌,去河邊找鬼。 笑死凑懂,一個胖子當著我的面吹牛煤痕,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼摆碉,長吁一口氣:“原來是場噩夢啊……” “哼塘匣!你這毒婦竟也來了?” 一聲冷哼從身側響起兆解,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤馆铁,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后锅睛,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體埠巨,經(jīng)...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年现拒,在試婚紗的時候發(fā)現(xiàn)自己被綠了辣垒。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,965評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡印蔬,死狀恐怖勋桶,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情侥猬,我是刑警寧澤例驹,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站退唠,受9級特大地震影響鹃锈,放射性物質發(fā)生泄漏。R本人自食惡果不足惜瞧预,卻給世界環(huán)境...
    茶點故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一屎债、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧垢油,春花似錦盆驹、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至惊楼,卻和暖如春玖瘸,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背檀咙。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留璃诀,地道東北人弧可。 一個月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親棕诵。 傳聞我的和親對象是個殘疾皇子裁良,可洞房花燭夜當晚...
    茶點故事閱讀 44,914評論 2 355

推薦閱讀更多精彩內容

  • 樹的概述 樹是一種非常常用的數(shù)據(jù)結構,樹與前面介紹的線性表校套,棧价脾,隊列等線性結構不同,樹是一種非線性結構 1.樹的定...
    Jack921閱讀 4,455評論 1 31
  • 基于樹實現(xiàn)的數(shù)據(jù)結構笛匙,具有兩個核心特征: 邏輯結構:數(shù)據(jù)元素之間具有層次關系侨把; 數(shù)據(jù)運算:操作方法具有Log級的平...
    yhthu閱讀 4,272評論 1 5
  • B樹的定義 一棵m階的B樹滿足下列條件: 樹中每個結點至多有m個孩子。 除根結點和葉子結點外妹孙,其它每個結點至少有m...
    文檔隨手記閱讀 13,221評論 0 25
  • 閑來蠢正,我喜歡在電腦里點弄骇笔,有時,我進了中國作家網(wǎng)嚣崭,我就在里面如饑如渴的讀著文章笨触,讀著讀著,我就選擇著最精美的作品讀...
    我只是不懂憂傷閱讀 137評論 0 0
  • 蒙田對懷疑主義最為充分的探討雹舀,來自《雷蒙?塞邦贊》一文芦劣。雷蒙?塞邦是15世紀的西班牙神學家,遵照父親的要求葱跋,蒙田把...
    蘿卜閱讀 1,065評論 0 0