LeetCode | Unique Binary Search Trees II

来源:互联网 发布:linux拷贝文件命令失败 编辑:程序博客网 时间:2024/06/03 17:31

题目

Given an integer n, generate all structurally unique BST’s (binary search trees) that store values 1…n.

For example,
Given n = 3, your program should return all 5 unique BST’s shown below.

   1         3     3      2      1    \       /     /      / \      \     3     2     1      1   3      2    /     /       \                 \   2     1         2                 3

思路

依次将每个数作为根节点,然后对根节点左边的数和右边的数做递归运算即可

代码

/** * Definition for a binary tree node. * public class TreeNode { *     int val; *     TreeNode left; *     TreeNode right; *     TreeNode(int x) { val = x; } * } */public class Solution {    public List<TreeNode> generateTrees(int n) {        if(n == 0)            return new ArrayList<TreeNode>();        return constructTrees(1,n);    }    public List<TreeNode> constructTrees(int left,int right){        if(left > right){            List<TreeNode> listTrees = new ArrayList<TreeNode>();            listTrees.add(null);            return listTrees;        }        List<TreeNode> listTrees = new ArrayList<TreeNode>();          for(int i=left;i<=right;i++){            List<TreeNode> listLeftTrees = constructTrees(left,i-1);            List<TreeNode> listRightTrees = constructTrees(i+1,right);            for(TreeNode leftNode:listLeftTrees){                for(TreeNode rightNode:listRightTrees){                    TreeNode rootNode = new TreeNode(i);                    rootNode.left = leftNode;                    rootNode.right = rightNode;                    listTrees.add(rootNode);                }            }       }        return listTrees;    }}
原创粉丝点击