zoukankan      html  css  js  c++  java
  • 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;
        }
  • 相关阅读:
    MySQL(后篇)
    数据库
    Ajax
    JQuery
    BOM & DOM
    CSS
    HTML
    Python之IO多路复用学习
    vue-router小记
    js中运算符的优先级
  • 原文地址:https://www.cnblogs.com/skillking/p/9709016.html
Copyright © 2011-2022 走看看