其他分享
首页 > 其他分享> > LeetCode 0095 Unique Binary Search Trees II

LeetCode 0095 Unique Binary Search Trees II

作者:互联网

原题传送门

1. 题目描述

2. Solution 1

1、思路分析
利用BST的中序遍历为递增序:遍历 1 ~ n,工作变量为i。设genTrees(int start, int end) 为构造树的方法
若i为根结点,则 left =genTrees(1, i - 1); right = genTrees(i + 1, n)。
2、代码实现

package Q0099.Q0095UniqueBinarySearchTreesII;

import DataStructure.TreeNode;

import java.util.ArrayList;
import java.util.List;

/*
  利用BST的中序遍历为递增序:遍历 1 ~ n,工作变量为i。设genTrees(int start, int end) 为构造树的方法
  若i为根结点,则 left =genTrees(1, i - 1); right = genTrees(i + 1, n)。
*/
public class Solution1 {

    public List<TreeNode> generateTrees(int n) {
        return genTrees(1, n);
    }

    private List<TreeNode> genTrees(int start, int end) {
        List<TreeNode> list = new ArrayList<>();

        if (start > end) {
            list.add(null);
            return list;
        }

        if (start == end) {
            list.add(new TreeNode(start));
            return list;
        }

        List<TreeNode> left, right;
        for (int i = start; i <= end; i++) {
            left = genTrees(start, i - 1);
            right = genTrees(i + 1, end);
            for (TreeNode lnode : left) {
                for (TreeNode rnode : right) {
                    TreeNode root = new TreeNode(i);
                    root.left = lnode;
                    root.right = rnode;
                    list.add(root);
                }
            }
        }
        return list;
    }
}

3、复杂度分析
时间复杂度:

标签:Binary,Search,end,int,List,Trees,start,return,genTrees
来源: https://www.cnblogs.com/junstat/p/16223226.html