题目描述
请实现两个函数,分别用来序列化和反序列化二叉树
二叉树的序列化是指:把一棵二叉树按照某种遍历方式的结果以某种格式保存为字符串,从而使得内存中建立起来的二叉树可以持久保存。序列化可以基于先序、中序、后序、层序的二叉树遍历方式来进行修改,序列化的结果是一个字符串,序列化时通过 某种符号表示空节点(#),以 ! 表示一个结点值的结束(value!)。
二叉树的反序列化是指:根据某种遍历顺序得到的序列化字符串结果str,重构二叉树。
例如,我们可以把一个只有根节点为1的二叉树序列化为"1,",然后通过自己的函数来解析回这个二叉树
/*
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
public class Solution {
String Serialize(TreeNode root) {
if(root==null)
return "#!";
StringBuilder sb=new StringBuilder();
Serialize2(root,sb);
return sb.toString();
}
void Serialize2(TreeNode root,StringBuilder sb){
if(root==null)
{
sb.append("#!");
return;
}
sb.append(root.val);
sb.append("!");
Serialize2(root.left,sb);
Serialize2(root.right,sb);
}
TreeNode Deserialize(String str) {
if(str.equals("#!"))
return null;
String[] strs=str.split("!");
return Deserialize2(strs);
}
int index=-1;
TreeNode Deserialize2(String[] strs){
index++;
if(!strs[index].equals("#"))
{
TreeNode root=new TreeNode(0);
root.val=Integer.parseInt(strs[index]);
root.left=Deserialize2(strs);
root.right=Deserialize2(strs);
return root;
}
return null;
}
}题目描述
从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
/*
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
import java.util.ArrayList;
import java.util.Queue;
import java.util.LinkedList;
public class Solution {
ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {
ArrayList<ArrayList<Integer>> as=new ArrayList<>();
Queue<TreeNode> q=new LinkedList();
if(pRoot==null)
return as;
q.add(pRoot);
while(q.size()>0)
{
ArrayList<Integer> a=new ArrayList<>();
int n=q.size();
for(int i=0;i<n;i++)
{
TreeNode t=q.poll();
a.add(t.val);
if(t.left!=null)
q.add(t.left);
if(t.right!=null)
q.add(t.right);
}
as.add(new ArrayList(a));
}
return as;
}
}题目描述
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。
/**
* Definition for binary tree
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
import java.util.Arrays;
public class Solution {
public TreeNode reConstructBinaryTree(int [] pre,int [] in) {
if(pre.length<=0)
return null;
if(pre.length==1)
return new TreeNode(pre[0]);
int rootval=pre[0];
TreeNode root=new TreeNode(rootval);
int rootindex=0;
for(int i=0;i<in.length;i++)
{
if(in[i]==rootval)
{
rootindex=i;
break;
}
}
root.left=reConstructBinaryTree(Arrays.copyOfRange(pre,1,rootindex+1),Arrays.copyOfRange(in,0,rootindex));
root.right=reConstructBinaryTree(Arrays.copyOfRange(pre,rootindex+1,pre.length),Arrays.copyOfRange(in,rootindex+1,in.length));
return root;
}
}

京公网安备 11010502036488号