zoukankan      html  css  js  c++  java
  • //分层数据抽象

    //JS 中没有树,用Array和Object构建树

    //DOM,级联选择,树形控件

    // 深度优先遍历:访问根节点、对根节点进行深度优先遍历,广度优先遍历

    bfs

    //bfs
    const tree = {
        val: 'a',
        children: [
            {
                val: 'b',
                children: [
                    {
                        val: 'd',
                        children: [],
                    },
                    {
                        val: 'e',
                        children: [],
                    }
                ],
            },
            {
                val: 'c',
                children: [
                    {
                        val: 'f',
                        children: [],
                    },
                    {
                        val: 'g',
                        children: [],
                    }
                ],
            }
        ],
    };
    
    const bfs = (root) => {
        const q = [root];
        while (q.length > 0) {
            const n = q.shift();
            console.log(n.val);
            n.children.forEach(child => {
                q.push(child);
            });
        }
    };
    
    bfs(tree);
    
    

    bt

    const bt = {
        val: 1,
        left: {
            val: 2,
            left: {
                val: 4,
                left: null,
                right: null,
            },
            right: {
                val: 5,
                left: null,
                right: null,
            },
        },
        right: {
            val: 3,
            left: {
                val: 6,
                left: null,
                right: null,
            },
            right: {
                val: 7,
                left: null,
                right: null,
            },
        },
    };
    
    module.exports = bt;
    

    dfs

    const tree = {
        val: 'a',
        children: [
            {
                val: 'b',
                children: [
                    {
                        val: 'd',
                        children: [],
                    },
                    {
                        val: 'e',
                        children: [],
                    }
                ],
            },
            {
                val: 'c',
                children: [
                    {
                        val: 'f',
                        children: [],
                    },
                    {
                        val: 'g',
                        children: [],
                    }
                ],
            }
        ],
    };
    
    const dfs = (root) => {
        console.log(root.val);
        root.children.forEach(dfs);
    };
    
    dfs(tree);
    

    inorder

    const bt = require('./bt');
    
    const inorder = (root) => {
        if (!root) { return; }
        inorder(root.left);
        console.log(root.val);
        inorder(root.right);
    };
    
    // const inorder = (root) => {
    //     if (!root) { return; }
    //     const stack = [];
    //     let p = root;
    //     while (stack.length || p) {
    //         while (p) {
    //             stack.push(p);
    //             p = p.left;
    //         }
    //         const n = stack.pop();
    //         console.log(n.val);
    //         p = n.right;
    //     }
    // };
    
    inorder(bt);
    

    json

    //遍历JSON所有节点
    const json = {
        a: { b: { c: 1}},
        d:[1,2],
    };
    //帮不合理的后端JSON传值擦屁股
    const dfs = (n, path) => {
        console.log(n, path);
        Object.keys(n).forEach(k =>{
            dfs(n[k],path.concat(k));
        });
    };
    
    dfs(json, []);
    

    postOrder

    const bt = require('./bt');
    
    const postorder = (root) => {
        if (!root) { return; }
        postorder(root.left);
        postorder(root.right);
        console.log(root.val);
    };
    
    // const postorder = (root) => {
    //     if (!root) { return; }
    //     const outputStack = [];
    //     const stack = [root];
    //     while (stack.length) {
    //         const n = stack.pop();
    //         outputStack.push(n);
    //         if (n.left) stack.push(n.left);
    //         if (n.right) stack.push(n.right);
    //     }
    //     while(outputStack.length){
    //         const n = outputStack.pop();
    //         console.log(n.val);
    //     }
    // };
    
    postorder(bt);
    

    preorder

    const bt = require('./bt');
    
    const preorder = (root) => {
        if (!root) { return; }
        console.log(root.val);
        preorder(root.left);
        preorder(root.right);
    };
    
    // const preorder = (root) => {
    //     if (!root) { return; }
    //     const stack = [root];
    //     while (stack.length) {
    //         const n = stack.pop();
    //         console.log(n.val);
    //         if (n.right) stack.push(n.right);
    //         if (n.left) stack.push(n.left);
    //     }
    // };
    
    preorder(bt);
    
  • 相关阅读:
    用户体验评价
    第十四周进度总结
    寻找水王
    第十三周进度总结
    第一阶段意见评论
    梦断代码阅读笔记02
    第十二周进度总结
    冲刺(第十天)
    单词统计续
    冲刺(第九天)
  • 原文地址:https://www.cnblogs.com/knightoffz/p/15685787.html
Copyright © 2011-2022 走看看