当前位置: 首页 > 后端技术 > Java

LeetCode-095-DifferentBinarySearchTreesII

时间:2023-04-01 16:02:45 Java

DifferentBinarySearchTreesII题目描述:给定一个整数n,请生成并返回所有n个节点值从1到n不同的二叉搜索树。可以按任何顺序返回答案。二叉搜索树(BinarySearchTree):也称为二叉排序树,它要么是一棵空树,要么是一棵二叉树,具有以下性质:如果它的左子树不为空,则左子树上所有节点的值节点小于其根节点的值;如果它的右子树不为空,则右子树上所有节点的值都大于它的根节点的值;它的左右子树也是一棵有序的二叉树。例子见LeetCode官网。来源:LeetCode链接:https://leetcode-cn.com/probl...版权归LeetCode所有。商业转载请联系官方授权,非商业转载请注明出处。方案一:递归的方法首先,当n为0时,结果是一棵空树,直接返回一个空列表。当n大于0时,用递归的方法分别得到左右子树。递归过程如下:所有节点都可以作为根节点,即遍历1到n的所有值作为根节点,当前根节点为i;然后i左边的所有值作为i的左子树递归调用方法;i右边的所有值递归调用方法作为i的右子树;最后把根节点i和对应的左右子树拼成一棵树,放到结果集中。最后返回的结果集是所有可能的二叉搜索树。importcom.kaesar.leetcode.TreeNode;importjava.util.ArrayList;importjava.util.List;publicclassLeetCode_095{/***递归**@paramn*@return*/publicstaticListgenerateTrees(intn){//当n为0时,它是一个空树if(n==0){returnnewArrayList<>();}返回generateTrees(1,n);}privatestaticListgenerateTrees(intstart,intend){ListallTrees=newArrayList<>();如果(开始>结束){allTrees。添加(空);返回所有树;}for(inti=start;i<=end;i++){//所有可能的左子树集合ListleftTrees=generateTrees(start,i-1);//所有可能的右子树集合ListrightTrees=generateTrees(i+1,end);for(TreeNodeleftTree:leftTrees){for(TreeNoderightTree:rightTrees){TreeNoderoot=newTreeNode(i);root.left=左树;root.right=右树;allTrees.add(根);}}}返回allTrees;}publicstaticvoidmain(String[]args){for(TreeNodegenerateTree:generateTrees(3)){generateTree.print();System.out.println();}}}【每日留言】别等了,男孩的头都白了,好难过!