当前位置: 代码迷 >> 综合 >> 数据结构_树_层次打印_序列化_反序列化
  详细解决方案

数据结构_树_层次打印_序列化_反序列化

热度:50   发布时间:2024-02-20 12:05:07.0

有一棵二叉树,请设计一个算法,按照层次打印这棵二叉树。

给定二叉树的根结点root,请返回打印结果,结果按照每一层一个数组进行储存,所有数组的顺序按照层数从上往下,且每一层的数组内元素按照从左往右排列。保证结点数小于等于500。

import java.util.*;/*
public class TreeNode {int val = 0;TreeNode left = null;TreeNode right = null;public TreeNode(int val) {this.val = val;}
}*/
public class TreePrinter {public int[][] printTree(TreeNode root) {// write code hereint i = 0;int j = 0;//int[][] result = new int[20][500];if(root == null){return null;}int cur = 1;int next = 0;Queue<TreeNode> queue = new LinkedList<>();queue.offer(root);List<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();ArrayList<Integer> tmpResult = new ArrayList<Integer>();while(!queue.isEmpty()){TreeNode temp = queue.poll();tmpResult.add(temp.val);if(temp.left != null){queue.offer(temp.left);next ++;}if(temp.right != null){queue.offer(temp.right);next ++;}cur --;if(cur == 0){result.add(tmpResult);tmpResult = new ArrayList<Integer>();cur = next;next = 0;i ++;j = 0;}}int[][] resArr = new int [result.size()][];for(int k = 0; k < result.size(); k++){int[] temp = new int[result.get(k).size()];for(int m = 0; m < result.get(k).size(); m++){temp[m] = result.get(k).get(m);}resArr[k] = temp;}return resArr;}
}

序列化和反序列化

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode(int x) { val = x; }* }*/
public class Codec {private int index = 0;// Encodes a tree to a single string.public String serialize(TreeNode root) {if(root == null){return "#!";}String res = root.val + "!";String left = serialize(root.left);String right = serialize(root.right);//错误;先序啊!!我又写成了中序!!!res = res + left+ right;return res;}// Decodes your encoded data to tree.//利用一个全局变量来控制public TreeNode deserialize(String data) {if(data == null){return null;}String[] val = data.split("!");return help(val);}public TreeNode help(String[] val){if(val[index].equals("#")){index ++;return null;}TreeNode root = new TreeNode(Integer.valueOf(val[index]));index ++;TreeNode left = help(val);TreeNode right = help(val);root.left = left;root.right = right;return root;}
}// Your Codec object will be instantiated and called as such:
// Codec codec = new Codec();
// codec.deserialize(codec.serialize(root));