博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
按之字形顺序打印二叉树
阅读量:4212 次
发布时间:2019-05-26

本文共 2017 字,大约阅读时间需要 6 分钟。

题目描述

请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。

 

第一种思路:也是从左到右来进行遍历,只不过是在该反转的时候用collections工具类进行反转,代码如下:

   

public ArrayList
> Print(TreeNode pRoot) { ArrayList
> ret = new ArrayList<>(); Queue
queue = new LinkedList<>(); queue.add(pRoot); boolean reverse = false; while (!queue.isEmpty()) { ArrayList
list = new ArrayList<>(); int cnt = queue.size(); while (cnt-- > 0) { TreeNode node = queue.poll(); if (node == null) continue; list.add(node.val); queue.add(node.left); queue.add(node.right); } if (reverse) Collections.reverse(list); reverse = !reverse; if (list.size() != 0) ret.add(list); } return ret;}

    

第二种方法是用到stack栈:

package cn.cqu.edu;import java.util.ArrayList;import java.util.Stack;public class Print {		class TreeNode {	    int val = 0;	    TreeNode left = null;	    TreeNode right = null;	    public TreeNode(int val) {	        this.val = val;	    }	}	    public ArrayList
> Print(TreeNode pRoot) { ArrayList
ele=new ArrayList
(); ArrayList
> list=new ArrayList
>(); if(pRoot==null) { return list; } int i=0; //奇数表示从左到右,偶数表示从右到左,注意这里描述的是进栈的顺序 Stack
previousStack1=new Stack<>(); previousStack1.push(pRoot); while(!previousStack1.isEmpty()) { Stack
currentStack2=new Stack<>(); i++; ArrayList
e=new ArrayList
(); int n=previousStack1.size(); if(i%2==0) //从右到左 { while(!previousStack1.isEmpty()) { TreeNode node=previousStack1.pop(); e.add(node.val); if(node.right!=null) { currentStack2.add(node.right); } if(node.left!=null) { currentStack2.add(node.left); } } } else { while(!previousStack1.isEmpty()) { TreeNode node=previousStack1.pop(); e.add(node.val); if(node.left!=null) { currentStack2.add(node.left); } if(node.right!=null) { currentStack2.add(node.right); } } } list.add(e); previousStack1=currentStack2; } return list; } public static void main(String[] args) { }}

第二种方法不如第一种好

转载地址:http://hdkmi.baihongyu.com/

你可能感兴趣的文章
Oracle Golden Gate 系列五 -- GG 使用配置 说明
查看>>
Oracle Golden Gate 系列六 -- 11gR2 Ora2Ora 单向复制 GG 示例
查看>>
Oracle Golden Gate 系列七 -- 配置 GG Manager process
查看>>
ORA-00600:[32695], [hash aggregation can't be done] 解决方法
查看>>
Oracle SQL中使用正则表达式 执行报ORA-07445 [_intel_fast_memcpy.A()+10] 错误
查看>>
Oracle TABLE ACCESS BY INDEX ROWID 说明
查看>>
ORA-00600 [kmgs_parameter_update_timeout_1], [27072] ORA-27072 解决方法
查看>>
Oracle 11g alert log 新增消息 opiodr aborting process unknown ospid (1951) as a result of ORA-28 说明
查看>>
Linux Context , Interrupts 和 Context Switching 说明
查看>>
《Oracle数据库问题解决方案和故障排除手册》终于发售了
查看>>
Oracle alert log ALTER SYSTEM SET service_names='','SYS$SYS.KUPC$C_...' SCOPE=MEMORY SID='' 说明
查看>>
Oracle latch:library cache 导致 数据库挂起 故障
查看>>
Openfiler 配置 NFS 示例
查看>>
Oracle 11.2.0.1 RAC GRID 无法启动 : Oracle High Availability Services startup failed
查看>>
Oracle 18c 单实例安装手册 详细截图版
查看>>
Oracle Linux 6.1 + Oracle 11.2.0.1 RAC + RAW 安装文档
查看>>
Oracle 11g 新特性 -- Online Patching (Hot Patching 热补丁)说明
查看>>
Oracle 11g 新特性 -- ASM 增强 说明
查看>>
Oracle 11g 新特性 -- Database Replay (重演) 说明
查看>>
Oracle 11g 新特性 -- 自动诊断资料档案库(ADR) 说明
查看>>