• 95. Unique Binary Search Trees II


    一、题目

      1、审题

      2、分析

        给出数值 n, 输出由节点值为 1,2....n  所形成的所有二叉查找树。

    二、解答

      1、思路:

        采用递归实现。

        ①、分别假设父结点为 1,2...i...n ,则左孩子为 1,2,..i-1, 右孩子为 i+1,i+2...n。

        ②、用列表 left 存储 左孩子的所有可能二叉树,用列表 right 存储右孩子的所有可能二叉树。最总将 left 拼接为 i 的左孩子,right 拼接为 i 的右孩子。

        ③、递归跳出条件为最左节点值 start > 最右节点值 end.

      

    private List<TreeNode> genTrees(int start, int end) {
            
            List<TreeNode> list = new ArrayList<>();
            
            if(start > end) {
                list.add(null);
                return list;
            }
            
            List<TreeNode> left, right;
            
            for (int i = start; i <= end; i++) {
                
                left = genTrees(start, i -1); // 左子树的所有结构
                right = genTrees(i + 1, end);    // 右子树的所有结构
                
                for(TreeNode lnode: left) {
                    for(TreeNode rnode: right) {
                        TreeNode root = new TreeNode(i);    // 左右子树与头结点拼接
                        root.left = lnode;
                        root.right = rnode;
                        list.add(root);
                    }
                }
            }
            return list;
        }
  • 相关阅读:
    Navicat 导出sql问题
    2017,我的第一次年终总结
    dev treelist和searchcontrol组合模糊查询用法
    构造函数详解
    Devexpress常见问题
    Devexpress 常用的功能
    dev Gridcontrol控件属性部分
    记录DEV gridview获取行列数据方法
    string类的几种方法
    plsql中的procedure和function编程
  • 原文地址:https://www.cnblogs.com/skillking/p/9709016.html
Copyright © 2020-2023  润新知