二叉树与多叉树的遍历

二叉树的顺序存储结构

二叉树的顺序存储结构就是用一维数组存储二叉树中的各个结点,并且结点的存储位置能体现结点之间的逻辑关系。

 

二叉树的遍历

二叉树的遍历有三种方式,如下:

(1)先序遍历(DLR),首先访问根结点,然后遍历左子树,最后遍历右子树。简记根-左-右。

(2)中序遍历(LDR),首先遍历左子树,然后访问根结点,最后遍历右子树。简记左-根-右。

(3)后序遍历(LRD),首先遍历左子树,然后遍历右子树,最后访问根结点。简记左-右-根。

假设dom结构如下:

  <div id="tree">

    <div>

      <div>
        <div></div>
        <div></div>
      </div>

      <div>
        <div></div>
        <div></div>
      </div>

    </div>

    <div>

      <div>
        <div></div>
        <div></div>
      </div>

      <div>
        <div></div>
        <div></div>
      </div>

    </div>

  </div>

遍历方式:

  var arr = [];
  // 递归先序遍历
  function recurDLR(node) {
    if (!node) {
      return;
    }
    arr.push(node);
    recurDLR(node.firstElementChild);
    recurDLR(node.lastElementChild);
  }
  // 递归中序遍历
  function recurLDR(node) {
    if (!node) {
      return;
    }
    recurLDR(node.firstElementChild);
    arr.push(node);
    recurLDR(node.lastElementChild);
  }
  // 递归后序遍历
  function recurLRD(node) {
    if (!node) {
      return;
    }
    recurLRD(node.firstElementChild);
    recurLRD(node.lastElementChild);
    arr.push(node);   
  }

 

多叉树结构遍历

  // 递归先序遍历 先遍历子节点 再遍历根节点
  function recurDLR(node) {
    if (!node) {
      return;
    }
    arr.push(node);
    for (let i = 0; i < node.children.length; i++) {
      if (node.children[i].nodeName.toLowerCase() === 'div') {
        recurDLR(node.children[i]);
      }      
    }   
  } 
  // 递归后序遍历 先遍历根节点 再遍历子节点
  function recurLRD(node) {
    if (!node) {
      return;
    }
    for (let i = 0; i < node.children.length; i++) {
      if (node.children[i].nodeName.toLowerCase() === 'div') {
        recurLRD(node.children[i]);
      }
    }
    arr.push(node);
  }

  // 层序遍历 从根节点一层一层向下遍历
  // 原理就是利用数组的后进先出 存储dom节点
  function recurLDR(node) {
    var stack = [];
    stack.push(node);
    var del = stack.shift();
    while (del) {    
      for (let i = 0; i < del.children.length; i++) {
        if (del.children[i].nodeName.toLowerCase() === 'div') {
          stack.push(del.children[i]);
        }
      }
      arr.push(del);
      del = stack.shift();
    }        
  }

 

    原文作者:GR07
    原文地址: https://www.cnblogs.com/gr07/p/7880173.html
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞