20200307
题目 :序列化二叉树
请实现两个函数,分别用来序列化和反序列化二叉树
你可以将以下二叉树:
1
/ \
2 3
/ \
4 5
序列化为 "[1,2,3,null,null,4,5]"
思路 :层次遍历
code
public class Codec{
public String serialize(TreeNode root){
if(null == root){
return "";
}
LinkedList<TreeNode> queue = new LinkedList<>();
StringBuilder builder = new StringBuilder("[");
queue.add(root);
while(!queue.isEmpty()){
TreeNode node = queue.removeFirst();
if(node != null){
builder.append(node.val);
queue.addLast(node.left);
queue.addLast(node.right);
}else{
builder.append("null");
}
builder.append(",");
}
builder.deleteCharAt(builder.length() - 1);
builder.append("]");
return builder.toString();
}
public TreeNode deserialize(String data){
if(data == null || data.isEmpty()){
return null;
}
String str = data.substring(1,data.length() - 1);
String[] nodes = str.split(",");
int index = 0;
TreeNode root = buildNode(nodes[index++]);
LinkedList<TreeNode> queue = new LinkedList<>();
queue.add(root);
while(!queue.isEmpty()){
TreeNode node = queue.removeFirst();
node.left = buildNode(nodes[index++]);
node.right = buildNode(nodes[index++]);
if(node.left != null){
queue.addLast(node.left);
}
if(node.right != null){
queue.addLast(node.right);
}
}
return root;
}
private TreeNode buildNode(String node){
if("null".equals(node)){
return null;
}
return new TreeNode(Integer.valueOf(node));
}
}
题目 字符串的排列
输入一个字符串,打印出该字符串中字符的所有排列
输入:s = "abc"
输出:["abc","acb","bac","bca","cab","cba"]
code
class Solution{
ArrayList<String> res = new ArrayList<>();
public String[] permutation(String s){
char[] ch = s.toCharArray();
dfs(ch,0);
String[] str = new String[res.size()];
if(s == null || s.length() == 0) return str;
for(int i=0;i < res.size();i++){
str[i] = res.get(i);
}
return str;
}
private void dfs(char[] ch, int start){
if(start == ch.length){
res.add(new String(ch));
return;
}
boolean[] used = new boolean[256];
for(int i = start;i < ch.length;i++){
if(used[ch[i]]) continue;
used[ch[i]] = true;
swap(ch,start,i);
dfs(ch,start+1);
swap(ch,start,i);
}
}
private void swap(char[] ch, int i, int j){
char tmp = ch[i];
ch[i] = ch[j];
ch[j] = tmp;
}
}
TreeNode node = queue.removeFirst();
node.left = buildNode(nodes[index++]);
node.right = buildNode(nodes[index++]);
if(node.left != null){
queue.addLast(node.left);
}
if(node.right != null){
queue.addLast(node.right);
}
}
return root;
}
private TreeNode buildNode(String node){
if("null".equals(node)){
return null;
}
return new TreeNode(Integer.valueOf(node));
}
}
**题目** 字符串的排列
输入一个字符串,打印出该字符串中字符的所有排列
```xml
输入:s = "abc"
输出:["abc","acb","bac","bca","cab","cba"]
code
class Solution{
ArrayList<String> res = new ArrayList<>();
public String[] permutation(String s){
char[] ch = s.toCharArray();
dfs(ch,0);
String[] str = new String[res.size()];
if(s == null || s.length() == 0) return str;
for(int i=0;i < res.size();i++){
str[i] = res.get(i);
}
return str;
}
private void dfs(char[] ch, int start){
if(start == ch.length){
res.add(new String(ch));
return;
}
boolean[] used = new boolean[256];
for(int i = start;i < ch.length;i++){
if(used[ch[i]]) continue;
used[ch[i]] = true;
swap(ch,start,i);
dfs(ch,start+1);
swap(ch,start,i);
}
}
private void swap(char[] ch, int i, int j){
char tmp = ch[i];
ch[i] = ch[j];
ch[j] = tmp;
}
}