日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

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

按之字形順序打印二叉樹

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

題目

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

解題

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

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>

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

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)站對您的學(xué)習(xí)有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 综合久久久久久久 | 亚洲性视频在线 | 国产一区二区毛片 | 国产精久久久 | 91黄色片| 不卡在线一区二区 | 热99精品| 日日爱网址 | 久久久国产一区二区三区 | 日本高清视频在线 | 免费黄色在线观看 | 日韩黄网站 | 成人自拍视频在线 | 久草干 | 国产视频一区二区 | 亚洲高清自拍 | 麻豆乱码国产一区二区三区 | 日本在线看片 | 久久久久久一区二区三区四区别墅 | 牲高潮99爽久久久久777 | 亚洲第一天堂av | 精品热久久 | 亚洲福利片 | 久久机热这里只有精品 | 日本在线视频一区二区 | 欧美一区二区精品久久久 | 2023av在线视频 | 久久久久久亚洲精品 | 精品成人一区 | 一级特黄a免费观看视频 | 五月天婷婷导航 | 久久免费国产视频 | 免费视频一区二区 | 国产视频久久久 | 91精品久久久久久久久久入口 | 久久久久国产一区二区 | 亚洲高清视频在线观看 | 日韩精品在线观看视频 | 亚洲一区二区免费视频 | 日本精品在线视频 | 伊人色综合网 |