国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

遍歷多叉樹(遞歸、非遞歸廣度優(yōu)先、深度優(yōu)先)

wing324 / 1271人閱讀

簡(jiǎn)單的遍歷一個(gè)樹形結(jié)構(gòu)數(shù)據(jù)的幾種方法、非遞歸方法效率最好。

(function (window, undefined) {
    var treeNodes = [
       {
            id: 1,
            name: "1",
            children: [
                 {
                      id: 11,
                      name: "11",
                      children: [
                           {
                                id: 111,
                                name: "111",
                                children:[]
                           },
                           {
                                id: 112,
                                name: "112"
                           }
                      ]
                 },
                 {
                      id: 12,
                      name: "12",
                      children: []
                 }
            ],
            users: []
       },
       {
            id: 2,
            name: "2",
            children: [
                {
                    id: 22,
                    name: "22",
                    children: []
                }
            ]
       }
    ];

    //遞歸實(shí)現(xiàn)
    var parseTreeJson = function(treeNodes){
       if (!treeNodes || !treeNodes.length) return;

       for (var i = 0, len = treeNodes.length; i < len; i++) {

            var childs = treeNodes[i].children;

            console.log(treeNodes[i].id);

            if(childs && childs.length > 0){
                 parseTreeJson(childs);
            }
       }
    };

    console.log("------------- 遞歸實(shí)現(xiàn) ------------------");
    parseTreeJson(treeNodes);

    //非遞歸廣度優(yōu)先實(shí)現(xiàn)
    var iterator1 = function (treeNodes) {
        if (!treeNodes || !treeNodes.length) return;

        var stack = [];

        //先將第一層節(jié)點(diǎn)放入棧
        for (var i = 0, len = treeNodes.length; i < len; i++) {
            stack.push(treeNodes[i]);
        }

        var item;

        while (stack.length) {
            item = stack.shift();

            console.log(item.id);

            //如果該節(jié)點(diǎn)有子節(jié)點(diǎn),繼續(xù)添加進(jìn)入棧底
            if (item.children && item.children.length) {
                //len = item.children.length;

                // for (i = 0; i < len; i++) {
                //  stack.push(item.children[i]);
                // }

                stack = stack.concat(item.children);
            }
        }
    };

    console.log("------------- 非遞歸廣度優(yōu)先實(shí)現(xiàn) ------------------");
    iterator1(treeNodes);

    //非遞歸深度優(yōu)先實(shí)現(xiàn)
    var iterator2 = function (treeNodes) {
        if (!treeNodes || !treeNodes.length) return;

        var stack = [];

        //先將第一層節(jié)點(diǎn)放入棧
        for (var i = 0, len = treeNodes.length; i < len; i++) {
            stack.push(treeNodes[i]);
        }

        var item;

        while (stack.length) {
            item = stack.shift();

            console.log(item.id);

            //如果該節(jié)點(diǎn)有子節(jié)點(diǎn),繼續(xù)添加進(jìn)入棧頂
            if (item.children && item.children.length) {
                // len = item.children.length;

                // for (; len; len--) {
                //  stack.unshift(item.children[len - 1]);
                // }
                stack = item.children.concat(stack);
            }
        }
    };

    console.log("------------- 非遞歸深度優(yōu)先實(shí)現(xiàn) ------------------");
    iterator2(treeNodes);
})(window);

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/91521.html

相關(guān)文章

  • 面試題:給你個(gè)id,去拿到name,叉樹遍歷

    前天面試遇到一個(gè)多叉樹面試的題目,在這里分享記錄一下。 題目:一個(gè)樹形的數(shù)據(jù)(如下數(shù)據(jù)),面試官給你一個(gè)id,然后拿到對(duì)應(yīng)的name? 數(shù)據(jù)結(jié)構(gòu)大概是這個(gè)樣子 var cityData = [ { id: 1, name: 廣東省, children: [ { id: 11, ...

    jayce 評(píng)論0 收藏0
  • JS中的二叉樹遍歷

    摘要:一個(gè)二叉樹的例子廣度優(yōu)先遍歷廣度優(yōu)先遍歷是從二叉樹的第一層根結(jié)點(diǎn)開始,自上至下逐層遍歷在同一層中,按照從左到右的順序?qū)Y(jié)點(diǎn)逐一訪問。有的書里將二叉樹的遍歷只講了上面三種遞歸遍歷。 二叉樹是由根節(jié)點(diǎn),左子樹,右子樹組成,左子樹和友子樹分別是一個(gè)二叉樹。這篇文章主要在JS中實(shí)現(xiàn)二叉樹的遍歷。 一個(gè)二叉樹的例子 var tree = { value: 1, left: { ...

    ghnor 評(píng)論0 收藏0
  • js 中二叉樹深度遍歷廣度遍歷(遞歸實(shí)現(xiàn)與遞歸實(shí)現(xiàn))

    摘要:樹中結(jié)點(diǎn)的最大層次稱為樹的深度或高度。二叉樹有深度遍歷和廣度遍歷,深度遍歷有前序中序和后序三種遍歷方法。二叉樹的前序遍歷可以用來顯示目錄結(jié)構(gòu)等中序遍歷可以實(shí)現(xiàn)表達(dá)式樹,在編譯器底層很有用后序遍歷可以用來實(shí)現(xiàn)計(jì)算目錄內(nèi)的文件及其信息等。 樹的簡(jiǎn)介 棧、隊(duì)列、鏈表等數(shù)據(jù)結(jié)構(gòu),都是順序數(shù)據(jù)結(jié)構(gòu)。而樹是非順序數(shù)據(jù)結(jié)構(gòu)。樹型結(jié)構(gòu)是一類非常重要的非線性結(jié)構(gòu)。直觀地,樹型結(jié)構(gòu)是以分支關(guān)系定義的層次結(jié)...

    Yuanf 評(píng)論0 收藏0
  • 叉樹遍歷

    摘要:前言本篇文章是在二叉排序樹的基礎(chǔ)上進(jìn)行遍歷查找與刪除結(jié)點(diǎn)。接下來我們根據(jù)構(gòu)造的這顆二叉樹進(jìn)行相應(yīng)遍歷查找與刪除操作。遍歷二叉樹二叉樹的遍歷分為深度優(yōu)先遍歷和廣度優(yōu)先遍歷。中序遍歷二叉排序樹,得到的數(shù)組是有序的且是升序的。 前言 本篇文章是在二叉排序樹的基礎(chǔ)上進(jìn)行遍歷、查找、與刪除結(jié)點(diǎn)。 那么首先來看一下什么是二叉排序樹? 二叉排序樹 定義 二叉排序樹,又稱二叉查找樹、二叉搜索樹。 若...

    aboutU 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<