当前位置: 首页 > Web前端 > JavaScript

103.二叉树之字形层序遍历-算法(leetcode,附思维导图+全解)300题

时间:2023-03-27 18:36:15 JavaScript

零题:算法(leetcode,附思维导图+全解)300题(103)二叉树Zigzag层序遍历1.题目描述2.解法概述(思维导图)3.全部解法1方案11)代码://方案1:《Self.Layer顺序遍历法》。//思路://1)边界:如果root为null,直接返回[]。//2)状态初始化:q1=[root],q2=[],resList=[],level=0。//3)遍历:条件是队列q1不为空。//4)返回结果:在resList中,将下标为奇数的元素项(数组形式)进行翻转。//resList.map((item,level)=>level%2===1?item.reverse():item);varzigzagLevelOrder=function(root){//1)边界:如果root为null,则直接返回[]。如果(根===空){返回[];}//2)状态初始化:q1=[root],q2=[],resList=[],level=0.letq1=[root],q2=[],resList=[],level=0;//3)遍历:条件是队列q1不为空。while(q1.length!==0){lettemp=q1.shift();if(temp.left!==null){q2.push(temp.left);}if(temp.right!==null){q2.push(temp.right);}if(resList[level]===undefined){resList[level]=[];}resList[level].push(temp.val);如果(q1.length===0){q1=q2;q2=[];级别++;}}//4)返回结果:resList中,将下标为奇数的元素项(数组形式)翻转。//资源列表。map((item,level)=>level%2===1?item.reverse():item);返回资源列表。map((item,level)=>level%2===1?item.reverse():item);};2方案21)code://方案2“递归方法(self)”。//技巧:“一般来说,二叉树优先考虑递归,递归的形参可以根据问题来定义。”//思路://1)状态初始化:curLevel=0,curRoot=root,resList=[]。//2)调用自定义递归函数。//3)返回结果resList。varzigzagLevelOrder=function(root){//递归实现constdfs=(curLevel=0,curRoot=null)=>{//1)递归退出if(!curRoot){return;}//2)递归体//2.1)如果当前层还没有初始化,那么resList[curLevel]=[]。如果(!resList[curLevel]){resList[curLevel]=[];}const{left,right,val}=curRoot;//2.2)如果当前层为奇数,则将对应的数组“倒过来”——resList[curLevel]。取消移位(值)。如果((curLevel%2)===1){resList[curLevel].unshift(val);}//2.3)如果当前层为偶数,则对应的数组会被“插入”——resList[curLevel].push(val)。else{resList[curLevel].push(val);}//2.4)当前层级+1,递归处理左子树。dfs(curLevel+1,左);//2.4)当前级别+1并递归处理右子树。dfs(curLevel+1,右);}//1)状态初始化:curLevel=0,curRoot=root,resList=[].让curLevel=0,curRoot=root,resList=[];//2)调用自定义递归函数。dfs(curLevel,curRoot);//3)返回结果resList。returnresList;};4资源分享&更多1历史文章-概览2博主简介码农三少,致力于编写极简但完整的问题解决方案(算法)的博主。专注一题多解,结构化思维,欢迎一起刷LeetCode~

猜你喜欢