多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內(nèi)最全I(xiàn)T社區(qū)平臺(tái) 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁 > php開源 > php教程 > 按之字形順序打印二叉樹

按之字形順序打印二叉樹

來源:程序員人生   發(fā)布時(shí)間:2016-07-05 14:34:02 閱讀次數(shù):2430次

題目

請(qǐng)實(shí)現(xiàn)1個(gè)函數(shù)依照之字形打印2叉樹,即第1行依照從左到右的順序打印,第2層依照從右至左的順序打印,第3行依照從左到右的順序打印,其他行以此類推。

解題

層次遍歷2叉樹很好理解
用隊(duì)列臨時(shí)寄存其中1層的結(jié)點(diǎn),出隊(duì)列更新到下1層結(jié)點(diǎn)
按之字形順序打印2叉樹需要兩個(gè)棧。
在打印某1行結(jié)點(diǎn)時(shí),把下1層的結(jié)點(diǎn)保存到相應(yīng)的棧里。如果當(dāng)前打印的是奇數(shù)層,則先保存左子結(jié)點(diǎn)再保存右子結(jié)點(diǎn)到第1個(gè)棧里;如果當(dāng)前打印的是偶數(shù)層,則先保存右結(jié)點(diǎn)在保存左子結(jié)點(diǎn)到第2個(gè)棧里。

import java.util.ArrayList; import java.util.*; /* public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } } */ public class Solution { public ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) { ArrayList<Integer> row = new ArrayList<Integer>(); ArrayList<ArrayList<Integer> > result = new ArrayList<ArrayList<Integer> >(); if(pRoot == null) return result; Stack<TreeNode> stack1 = new Stack<TreeNode>(); Stack<TreeNode> stack2 = new Stack<TreeNode>(); boolean flag = true; stack1.push(pRoot); while(!stack1.isEmpty() || !stack2.isEmpty()){ row = new ArrayList<Integer>(); if(flag){ int size = stack1.size(); while((size--) >0){ TreeNode node = stack1.pop(); row.add(node.val); if(node.left!=null) stack2.push(node.left); if(node.right!=null) stack2.push(node.right); } flag = false; }else{ int size = stack2.size(); while((size--) >0){ TreeNode node = stack2.pop(); row.add(node.val); if(node.right!=null) stack1.push(node.right); if(node.left!=null) stack1.push(node.left); } flag = true; } result.add(row); } return result; } }

if else 程序?qū)懙暮艽?/p>

用隊(duì)列
層次遍歷輸出的每層元素都是左右的
對(duì)本題我們需要交叉的輸出
左右輸出
右左輸出
所有只需要對(duì)偶數(shù)的行在層次遍歷的基礎(chǔ)上進(jìn)行逆序就行了

import java.util.ArrayList; import java.util.*; /* public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } } */ public class Solution { public ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) { ArrayList<Integer> row = new ArrayList<Integer>(); ArrayList<ArrayList<Integer> > result = new ArrayList<ArrayList<Integer> >(); if(pRoot == null) return result; boolean flag = true; Queue<TreeNode> queue = new LinkedList<TreeNode>(); queue.offer(pRoot); while(!queue.isEmpty()){ int size = queue.size(); row = new ArrayList<Integer>(); while((size--)>0){ TreeNode node = queue.poll(); row.add(node.val); if(node.left!=null) queue.offer(node.left); if(node.right!=null) queue.offer(node.right); } if(!flag){ reverse(row); } flag = !flag; result.add(row); } return result; } public void reverse(ArrayList<Integer> list){ int i=0; int j=list.size() -1; while(i<j){ swap(list,i,j); i++; j--; } } public void swap(ArrayList<Integer> list,int i,int j){ int a = list.get(i); int b = list.get(j); list.set(i,b); list.set(j,a); } }

生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對(duì)您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 成人欧美一区二区三区在线 | 欧洲视频一区 | 免费国产一区二区在免费观看 | 综合欧美亚洲 | 最近的中文字幕免费视频1 最近的中文字幕免费完整 最近的中文字幕视频大全高清 | 日本不卡一区二区三区 最新 | jizz18欧美18 | 国产香蕉一区二区在线网站 | 亚洲国产成人综合 | 亚洲成人福利在线 | 色视频播放 | 无人区一区二区三区乱码 | 欧美第六页 | 全部无卡免费的毛片在线看 | 久久久久久日本一区99 | 99影视在线视频免费观看 | 午夜视频免费在线播放 | 性欧美高清极品xx | 欧美videosex性欧美成人 | 91精品乱码一区二区三区 | 主播福利视频在线观看网址 | 在线午夜视频 | 亚洲精品欧美精品日韩精品 | 精品亚洲综合久久中文字幕 | 欧美午夜视频 | 最近中字视频在线观看 | 成人一区二区免费中文字幕 | 欧美另类精品xxxx人妖换性 | 插插网站| 伊人久久大香线焦在观看 | 性欧美videos护士 | 用劲好爽再深点视频 | 久久婷五月天 | 桃花福利视频在线观看 | 国内自拍网 | 国产成人性毛片 | 三级全黄在线观看www桃花 | 国产成人久久精品 | 在线观看男女激情小视频 | 综合久久久久久 | 叼嘿免费视频 |