【力扣】95. 不同的二叉搜索树 II
二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。 --即所有的根节点大于左子节点,小于右子节点
class Solution { public List<TreeNode> generateTrees(int n) { if (n == 0) { return new LinkedList<TreeNode>(); } return generateTrees(1, n); } public List<TreeNode> generateTrees(int start, int end) { List<TreeNode> allTrees = new LinkedList<TreeNode>(); if (start > end) { allTrees.add(null); return allTrees; } // 枚举可行根节点 for (int i = start; i <= end; i++) { // 获得所有可行的左子树集合 List<TreeNode> leftTrees = generateTrees(start, i - 1); // 获得所有可行的右子树集合 List<TreeNode> rightTrees = generateTrees(i + 1, end); // 从左子树集合中选出一棵左子树,从右子树集合中选出一棵右子树,拼接到根节点上 for (TreeNode left : leftTrees) { for (TreeNode right : rightTrees) { TreeNode currTree = new TreeNode(i); currTree.left = left; currTree.right = right; allTrees.add(currTree); } } } return allTrees; } }
一个入行不久的Java开发,越学习越感觉知识太多,自身了解太少,只能不断追寻