美文网首页
数据结构:二叉树以及它的遍历

数据结构:二叉树以及它的遍历

作者: 泰然自若_750f | 来源:发表于2020-05-12 13:46 被阅读0次
 var  root={
        id:1,
        left:{
            id:3,
            left:{
                id:5,
                left:{
                      id:9
                }
            },
            right:{
                  id:6
            }
              
        },
        right:{
            id:4,
            left:{
                id:7

            },
            right:{
                  id:8,
                  right:{
                       id:10
                  }
            }

        }
  };
/**
   *  递归前序
   *  对于二叉树中的任意一个节点,先打印该节点,
   *  然后是它的左子树,最后右子树
   */
  let arrId=[];

   function DLR(root){
       if(typeof root!='object' || typeof root ===null)
       {
           return;
       }
       arrId.push(root.id);
       DLR(root.left);
       DLR(root.right);
   }

   /**
    * 递归中序
    * 对于二叉树中的任意一个节点,
    * 先打印它的左子树,然后是该节点,最后右子树
    */

    function LDR(root){
        if(typeof root!='object' || typeof root ===null)
        {
            return;
        }
        LDR(root.left);
        arrId.push(root.id);
        LDR(root.right);
    }

    /**
     * 递归后序
     * 对于二叉树中的任意一个节点,
     * 先打印它的左子树,然后是右子树,最后该节点
     */

     function LRD(root){

        if(typeof root!='object' || typeof root ===null)
        {
            return;
        }
   
        LRD(root.left);
        LRD(root.right);
        arrId.push(root.id);
     }


     function DLR2(roots){
          
        let arrId=[],stack=[roots];
        while(root.length>0)
        {
            //出栈
             let root=stack.pop();
             arrId.push(root.id);
             //左侧入栈
             if(root.left)
             {
                 stack.unshift(root.left);
             }
             //右节点入栈 插入到左节点前面
             if(root.right)
             {
                 stack.unshift(root.right);
             }
        }
        return arrId;

     }

     function LDR2(roots){
          
        let arrId=[],stack=[],cur=roots;
        while(stack.length>0 || cur)
        {
            while(cur)
            {   
                stack.push(cur);
                 //不断将左侧树入栈
                 cur=cur.left?cur.left:null;
            }
            //取最后一个出栈
             let root=stack.pop();
             arrId.push(root.id);
        
             //将右节点 赋值 下一次遍历右节点的左侧树入栈
            //  left 
            //       \
            //       right
            //
             //如果没有右节点 当前 root 已经出栈  会继续上轮取值
             // left 
             cur=root.right?root.right:null;
        }
        return arrId;

     }
    /**
     * 利用栈实现后序遍历
     * 后序遍历: 左-》右=》中
     * 可以修改 先序
     * 我们可以将 先实现 中=》右=》左 然后 将数组反序就能实现
     * @param {*} roots 
     */
     function LRD2(roots){
          
        let arrId=[],stack=[roots];
        while(stack.length>0)
        {
            //取最后一个节点出栈
             let root=stack.pop();
             arrId.push(root.id);
             //左侧入栈
             if(root.left)
             {
                 stack.push(root.left);
             }
             //右节点入栈
             if(root.right)
             {
                 stack.push(root.right);
             }
        }
        return arrId.reverse();

     }

相关文章

  • 大数据面试题目

    一、数据结构与算法 1.二叉树前序、中序、后续遍历方式(递归以及非递归) 2.二叉树的深度以及广度遍历方式 ...

  • 算法学习

    ### 实现二叉树以及二叉树遍历数据结构递归比较重要 1.先序遍历 先序遍历,就是先遍历根节点然后再遍历左子树,最...

  • 面试,你需要知道这些东西

    一、数据结构与算法 1.二叉树前序、中序、后续遍历方式(递归以及非递归) 2.二叉树的深度以及广度遍历方式 3.二...

  • 新鲜出炉!阿里大数据工程师面经!

    一、数据结构与算法 1.二叉树前序、中序、后续遍历方式(递归以及非递归) 2.二叉树的深度以及广度遍历方式 3.二...

  • 二叉树遍历(IFE题目)

    二叉树的遍历 今天的题目是模拟对二叉树的遍历,大二本来就学过数据结构这一门课,先序遍历、中序遍历以及后序遍历理解起...

  • 二叉树的遍历

    数据结构算法 二叉树的遍历

  • python实现二叉树的遍历

    二叉树是一种非常重要的数据结构,很多其它数据结构都是基于二叉树的基础演变而来的。对于二叉树,有深度遍历和广度遍历,...

  • 算法系列--二叉树的三种遍历的六种实现

    0. 二叉树是常见的数据结构,二叉树常见的遍历方式有前序遍历,中序遍历和后序遍历。前序遍历就是中-左-右节点的顺序...

  • 二叉树的四种遍历方法

    二叉树的数据结构 1、前序遍历(递归) 2、中序遍历(递归) 3、后序遍历(递归) 4、层次遍历(队列)

  • Python实现深度优先与广度优先

    二叉树的两种遍历是数据结构的经典考察题目, 广度遍历考察队列结构, 深度遍历考察递归 二叉树 深度优先 先序遍历(...

网友评论

      本文标题:数据结构:二叉树以及它的遍历

      本文链接:https://www.haomeiwen.com/subject/vsjbnhtx.html