LeetCode | Unique Binary Search Trees II

xiaoxiao2021-02-28  87

题目

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; } }
转载请注明原文地址: https://www.6miu.com/read-51012.html

最新回复(0)