剑指offer-20200307

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;
    }
}
发布了94 篇原创文章 · 获赞 13 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_31900497/article/details/104710804