剑指offer 按之字形顺序打印二叉树
Posted *^O^*—*^O^*
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指offer 按之字形顺序打印二叉树相关的知识,希望对你有一定的参考价值。
题目描述
请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
题目链接
解题思路
首先可以看到,返回的是一个顺序表,接着我们可以采取层序遍历的方式,每一层构建一个顺序表加入到最终返回的顺序表中,但是这样得到的顺序表只有偶数层是正确的,奇数层是反着的,所以就需要对奇数层进行操作,代码一是自己写的操作,代码二是使用库函数的操作。
代码示例
import java.util.ArrayList;
/*
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
public class Solution {
public static ArrayList<ArrayList<Integer> > result = new ArrayList<>();
public ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {
result = new ArrayList<>();
if(pRoot == null){
return result;
}
helper(pRoot,0);
for(int i = 0;i<result.size();i++){
if(i%2 != 0){
help(result.get(i));
}
}
return result;
}
public void helper(TreeNode root,int level){
if(level == result.size()){
result.add(new ArrayList<>());
}
result.get(level).add(root.val);
if(root.left != null){
helper(root.left,level+1);
}
if(root.right != null){
helper(root.right,level+1);
}
}
public void help(ArrayList list){
int[] arr = new int[list.size()];
for(int i =0;i<list.size();i++){
arr[i] = (int)list.get(i);
}
for(int i = 0;i<list.size();i++){
list.set(i,arr[arr.length-1-i]);
}
}
}
第二种
import java.util.ArrayList;
import java.util.Collections;
/*
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
public class Solution {
ArrayList<ArrayList<Integer>> Print(TreeNode pRoot) {
ArrayList<ArrayList<Integer>> list = new ArrayList<>();
depth(pRoot,1,list);
for(int i=0;i<list.size();i++){
if(i%2!=0){
Collections.reverse(list.get(i));
}
}
return list;
}
private void depth(TreeNode root, int depth, ArrayList<ArrayList<Integer>> list) {
if(root==null)
return;
if(depth>list.size()){
list.add(new ArrayList<Integer>());
}
list.get(depth-1).add(root.val);
depth(root.left,depth+1,list);
depth(root.right,depth+1,list);
}
}
以上是关于剑指offer 按之字形顺序打印二叉树的主要内容,如果未能解决你的问题,请参考以下文章