深度優先、廣度優先創建n叉樹

  • 2019 年 10 月 29 日
  • 筆記

1

function makeTree(layer) {      const root = {};      makeNode(root, layer);      return root;  }    function makeNode(node, layer, keys = ['left', 'right']) {        if (!--layer) {          keys.forEach((key) => {              node[key] = null;          })          return;      }        keys.forEach((key) => {          node[key] = {};      });        keys.forEach((key) => {          makeNode(node[key], layer);      });    }

2

function makeTree(layer, keys = ['left', 'right']) {      if (!layer) {          return null;      }      layer--;      const node = {};       keys.forEach((key) => {          node[key] = makeTree(layer);      });        return node;  }

3

function makeBinaryTree(layer = 4) {       function Node(opts) {      return opts;     }       const root = {value: 0, layer: 0};     let queue = [root];     let current;     while(current = queue.shift()) {        if (current.layer == layer) {       return root;      }      current.left = new Node({value: 0, layer: current.layer + 1});      current.right = new Node({value: 1, layer: current.layer + 1});      queue.push(current.left);      queue.push(current.right);     }      }