首页 > 试题广场 >

不同的二叉搜索树(二)

[编程题]不同的二叉搜索树(二)
  • 热度指数:336 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
给定一个由节点值从 1 到 n 的 n 个节点。请问由多少种不同的方法用这 n 个节点构成互不相同的二叉搜索树。
请你输出所有不同的二叉搜索树。

例如:当n=2时有
数据范围:
示例1

输入

2

输出

[{1,#,2},{2,1}]
示例2

输入

3

输出

[{1,#,2,#,3},{1,#,3,2},{2,1,3},{3,1,#,#,2},{3,2,#,1}]

说明

 

说明:本题目包含复杂数据结构TreeNode,点此查看相关信息
package main
//import "fmt"
import . "nc_tools"
/*
 * type TreeNode struct {
 *   Val int
 *   Left *TreeNode
 *   Right *TreeNode
 * }
 */

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param n int整型 
 * @return TreeNode类一维数组
*/
func BSTgenerate( n int ) []*TreeNode {
    arr:=make([]int,n)
    for i,_:=range arr{
        arr[i]=i+1
    }
    var order func([]int)[]*TreeNode
    order=func(arr []int)[]*TreeNode{
        if len(arr)==0{
            return []*TreeNode{nil}
        }
        if len(arr)==1{
            return []*TreeNode{&TreeNode{Val:arr[0]}}
        }
        ans:=[]*TreeNode{}
        for i,x:=range arr{
            l:=order(arr[:i])
            r:=order(arr[i+1:])
            for _,p:=range l{
                for _,q:=range r{
                    ans=append(ans,&TreeNode{x,p,q})
                }
            }
        }
        return ans
    }
    return order(arr)
}

发表于 2023-03-15 21:25:09 回复(0)
importjava.util.*;
 
/*
 *publicclassTreeNode {
 *  intval =0;
 *   TreeNode left =null;
 *   TreeNode right =null;
 *  publicTreeNode(intval) {
 *    this.val = val;
 *   }
 * }
 */
 
publicclassSolution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param n int整型
     * @return TreeNode类ArrayList
     */
    publicArrayList<TreeNode> BSTgenerate (intn) {
        returnbuild(1, n);
        // write code here
    }
     
    privateArrayList<TreeNode> build(intstart,intend){
        ArrayList<TreeNode> list =newArrayList<>();
        if(start > end){
            list.add(null);
            returnlist;
        }
         
        for(inti=start; i<=end; ++i){
            ArrayList<TreeNode> left = build(start, i-1);
            ArrayList<TreeNode> right = build(i+1, end);
             
            for(TreeNode p: left){
                for(TreeNode q : right){
                    TreeNode node =newTreeNode(i);
                    node.left = p;
                    node.right = q;
                    list.add(node);
                }
            }
        }
         
        returnlist;
    }
}
发表于 2022-07-13 08:52:51 回复(0)