zoukankan      html  css  js  c++  java
  • 二叉树与多叉树的遍历

    二叉树的顺序存储结构

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

    二叉树的遍历

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

    (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();
        }        
      }
  • 相关阅读:
    bit byte哪些事
    各种字符集和编码详解
    常用工具大全
    表单提交的3种方式,http post的contentType
    主动发电
    Hibernate与 MyBatis的比较
    storm简介
    2013年十大免费云空间排行榜-给开发者建站用的免费云主机
    中国著名讲师全录
    iptables只允许指定ip地址访问指定端口
  • 原文地址:https://www.cnblogs.com/gr07/p/7880173.html
Copyright © 2011-2022 走看看