力扣labuladong——一刷day73

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、力扣449. 序列化和反序列化二叉搜索树
  • 二、力扣173. 二叉搜索树迭代器


前言


可以直接中序遍历两个 BST 得到两个有序数组,然后把这两个有序数组合并,这个思路简单,但是空间复杂度会高一些

一、力扣449. 序列化和反序列化二叉搜索树

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
public class Codec {
    StringBuilder sb = new StringBuilder();

    // Encodes a tree to a single string.
    public String serialize(TreeNode root) {
        fun(root);
        return sb.toString();
    }

    // Decodes your encoded data to tree.
    public TreeNode deserialize(String data) {
        if(data.isEmpty()){
            return null;
        }
        LinkedList<Integer> list = new LinkedList<>();
        for(String s : data.split(",")){
            list.add(Integer.parseInt(s));
        }
        return fun(list,Integer.MIN_VALUE, Integer.MAX_VALUE);
    }
    public TreeNode fun(LinkedList<Integer> list, int min, int max){
        if(list.isEmpty()){
            return null;
        }
        int temp = list.getFirst();
        if(temp > max || temp < min){
            return null;
        }
        list.removeFirst();
        TreeNode cur = new TreeNode(temp);
        cur.left = fun(list, min, temp);
        cur.right = fun(list, temp, max);
        return cur;
    }
    public void fun(TreeNode root){
        if(root == null){
            return;
        }
        sb.append(root.val).append(",");
        fun(root.left);
        fun(root.right);
    }
}

// Your Codec object will be instantiated and called as such:
// Codec ser = new Codec();
// Codec deser = new Codec();
// String tree = ser.serialize(root);
// TreeNode ans = deser.deserialize(tree);
// return ans;

二、力扣173. 二叉搜索树迭代器

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class BSTIterator {
    List<Integer> list = new ArrayList<>();
    int index = 0;
    public BSTIterator(TreeNode root) {
        fun(root);
    }
    
    public int next() {
        int cur = list.get(index);
        index ++;
        return cur;
    }
    
    public boolean hasNext() {
        if(index < list.size()){
            return true;
        }
        return false;
    }
    public void fun(TreeNode root){
        if(root == null){
            return ;
        }
        fun(root.left);
        list.add(root.val);
        fun(root.right);
    }
}

/**
 * Your BSTIterator object will be instantiated and called as such:
 * BSTIterator obj = new BSTIterator(root);
 * int param_1 = obj.next();
 * boolean param_2 = obj.hasNext();
 */

你可能感兴趣的:(力扣题解,leetcode,算法,职场和发展,数据结构,java)