zoukankan      html  css  js  c++  java
  • [Algorithms] Tree Data Structure in JavaScript

    In a tree, nodes have a single parent node and may have many children nodes. They never have more than one parent nor point to any siblings.

    The most common tree structure you see is a web page. The underlying structure is often called the "DOM tree". The html element forms the root of our tree, with children of head and body, so on and so forth. In this lesson, we'll create a quick example of a DOM tree with our tree data structure.

     
    function crateNode (key) {
        let children = [];
        return {
            key,
            children,
            addChild (cKey) {
                const childNode = crateNode(cKey)
                this.children.push(childNode)
                return childNode;
            }
        }
    }
    
    function createTree (rootKey) {
        const root = crateNode(rootKey);
    
        function print () {
            let result = '';
    
            function traverse (node, visitFn, depth) {
                visitFn(node, depth);
    
                if (node.children.length) {
                    node.children.forEach(n => traverse(n, visitFn, depth + 1))
                }
            }
    
            function addKeyToResult(node, depth) {
                result +=
                  result.length === 0
                    ? node.key
                    : `
    ${' '.repeat(depth * 2)}${node.key}`
            }
    
            traverse(root, addKeyToResult, 0)
    
            return result;
        }
        return {
            root,
            print
        }
    }
    
    const dom = createTree('html')
    const head = dom.root.addChild('head')
    const body = dom.root.addChild('body')
    const title = head.addChild('title - egghead Tree Lesson')
    const header = body.addChild('header')
    const main = body.addChild('main')
    const footer = body.addChild('footer')
    const h1 = header.addChild('h1 - Tree Lesson')
    const p = main.addChild('p - Learn about trees!')
    const copyright = footer.addChild(`Copyright ${new Date().getFullYear()}`)
    
    console.log(dom.print())
    
    /*
    html
      head
        title - egghead Tree Lesson
      body
        header
          h1 - Tree Lesson
        main
          p - Learn about trees!
        footer
          Copyright 2018
    
    */
  • 相关阅读:
    【转】PHP使用共享内存进程间通信
    【转】php进程间通信--有名管道
    【转】代理模式-php白话示例
    [转]设计的核心任务之三:确保正交性
    pc主板支持独显和集显视频输出
    OpenGL核心技术之抗锯齿
    读书:有钱人想的和你不一样
    js 文本相似度
    js实现获得QQ截图或者微信截图后剪切板的内容clipboardData
    【转】chrome浏览器F12 Network中Timing参数含义
  • 原文地址:https://www.cnblogs.com/Answer1215/p/10134940.html
Copyright © 2011-2022 走看看