大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學習攻略 Java學習 Java二叉樹遍歷算法總結

Java二叉樹遍歷算法總結

更新時間:2022-07-11 12:29:47 來源:動力節點 瀏覽1549次

Java二叉樹遍歷算法都有哪些?動力節點小編來給大家總結一下。

二叉樹的遍歷(traversing binary tree)是指從根結點出發,按照某種次序依次訪問二叉樹中所有的結點,使得每個結點被訪問依次且僅被訪問一次。

四種遍歷方式分別為:先序遍歷、中序遍歷、二叉樹后序遍歷、層序遍歷。

首先來看前序遍歷,所謂的前序遍歷就是先訪問根節點,再訪問左節點,最后訪問右節點,

如上圖所示,前序遍歷結果為:

ABDFECGHI

實現代碼如下:

/**
     * 二叉樹前序遍歷   根-> 左-> 右
     * @param node    二叉樹節點
     */
    public static void preOrderTraveral(TreeNode node){
        if(node == null){
            return;
        }
        System.out.print(node.data+" ");
        preOrderTraveral(node.leftChild);
        preOrderTraveral(node.rightChild);
    }

再者就是中序遍歷,所謂的中序遍歷就是先訪問左節點,再訪問根節點,最后訪問右節點,

如上圖所示,中序遍歷結果為:

DBEFAGHCI

實現代碼如下:

/**
     * 二叉樹中序遍歷   左-> 根-> 右
     * @param node   二叉樹節點
     */
    public static void inOrderTraveral(TreeNode node){
        if(node == null){
            return;
        }
        inOrderTraveral(node.leftChild);
        System.out.print(node.data+" ");
        inOrderTraveral(node.rightChild);
    }

最后就是后序遍歷,所謂的后序遍歷就是先訪問左節點,再訪問右節點,最后訪問根節點。

如上圖所示,后序遍歷結果為:

DEFBHGICA

實現代碼如下:

/**
     * 二叉樹后序遍歷   左-> 右-> 根
     * @param node    二叉樹節點
     */
    public static void postOrderTraveral(TreeNode node){
        if(node == null){
            return;
        }
        postOrderTraveral(node.leftChild);
        postOrderTraveral(node.rightChild);
        System.out.print(node.data+" ");
    }

講完上面三種遞歸的方法,下面再給大家講講非遞歸是如何實現前中后序遍歷的。

還是一樣,先看非遞歸前序遍歷

1.首先申請一個新的棧,記為stack;

2.聲明一個結點treeNode,讓其指向node結點;

3.如果treeNode的不為空,將treeNode的值打印,并將treeNode入棧,然后讓treeNode指向treeNode的右結點,

4.重復步驟3,直到treenode為空;

5.然后出棧,讓treeNode指向treeNode的右孩子

6.重復步驟3,直到stack為空.

實現代碼如下:

public static void preOrderTraveralWithStack(TreeNode node){
        Stack<TreeNode> stack = new Stack<TreeNode>();
        TreeNode treeNode = node;
        while(treeNode!=null || !stack.isEmpty()){
            //迭代訪問節點的左孩子,并入棧
            while(treeNode != null){
                System.out.print(treeNode.data+" ");
                stack.push(treeNode);
                treeNode = treeNode.leftChild;
            }
            //如果節點沒有左孩子,則彈出棧頂節點,訪問節點右孩子
            if(!stack.isEmpty()){
                treeNode = stack.pop();
                treeNode = treeNode.rightChild;
            }
        }
    }

中序遍歷非遞歸,在此不過多敘述具體步驟了。如果大家對此比較感興趣,想了解更多相關知識,不妨來關注一下動力節點的Java教程,里面有更豐富的知識等著大家去學習,相信對大家會有所幫助的。

提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 久草视频免费在线观看 | 久久精品网站免费观看调教 | 不卡精品国产_亚洲人成在线 | 免费观看成人毛片 | 久久国产大片 | 免费观看大片毛片 | 日韩亚洲欧美在线观看 | www亚洲欲色成人久久精品 | 国产区亚洲区 | 97碰公开在线观看免费视频 | 国产白拍 | 97视频精品 | 一区二区三区成人 | 久久亚洲精品一区成人 | 香蕉视频黄在线观看 | 婷婷色在线视频 | 69成人做爰视频在线观看 | 亚洲香蕉久久一区二区 | 欧美洲大黑香蕉在线视频 | 亚洲第一成年网 | 嘿咻成人免费视频欧美激情 | 欧美精品久久久久久久久大尺度 | 亚洲精品久久九九热 | 理论在线视频 | 黄色成人一级片 | 日韩国产精品99久久久久久 | 国产免费一级高清淫日本片 | 五月国产综合视频在线观看 | 久九九久福利精品视频视频 | 亚洲一区欧洲一区 | 五月天婷亚洲天综合网精品偷 | 一级特级全黄 | 大陆国产精品视频 | 日本亚洲精品一区二区三区 | 深夜免费在线视频 | 国产啪爱视频精品免视 | 日韩欧美国产综合 | 热久久久久久久 | 久久一日本道色综合久久 | 成 人 黄 色 视频播放1 | 国产精品一区二区三区久久 |