zoukankan      html  css  js  c++  java
  • 不同的二叉搜索树

    给定一个整数 n,生成所有由 1 ... n 为节点所组成的二叉搜索树。

    示例:

    输入: 3
    输出:
    [
      [1,null,3,2],
      [3,2,null,1],
      [3,1,null,null,2],
      [2,1,3],
      [1,null,2,null,3]
    ]
    解释:
    以上的输出对应以下 5 种不同结构的二叉搜索树:
    
       1         3     3      2      1
               /     /      /       
         3     2     1      1   3      2
        /     /                        
       2     1         2                 3

    解题思路:

    该题求解由1-n构成的所有二叉搜索树,若以 i(1<=i<=n)为根节点,i的左子树的节点应当小于i,右子树的节点大于i。

    则(1, i-1)构成的所有二叉搜索树,节点i,(i+1, n)构成的所有二叉搜索树,可以得到以i为根节点的所有BST。

    故要得到以i为根节点的BST,要先得到(1, i-1)构成的所有二叉搜索树与(i+1, n)构成的所有二叉搜索树。可以采用递归法求解此题。

    代码如下:

        public static List<TreeNode> generateTrees(int n) {
            if (n ==0) return new LinkedList<TreeNode>();
            List<TreeNode> list = test(1, n);
            return list;
        }
    
        private static List<TreeNode> test(int m, int n) {
    
            List<TreeNode> list = new LinkedList<TreeNode>();
            if (m>n) {
                list.add(null);
                return list;
            }
            if (m == n) {
                list.add(new TreeNode(m));
                return list;
            }
    
            List<TreeNode> left;    // (m,i-1)构成的所有BST 
            List<TreeNode> right;   // (i+1,n)构成的所有BST
            TreeNode root;
            for (int i=m; i<=n; i++) {
                left = test(m, i-1);
                right = test(i+1, n);
    
                // 以节点i为根节点的所有二叉搜索树
                for (TreeNode leftNode:left)
                    for (TreeNode rightNode:right) {
                        root = new TreeNode(i);
                        root.left = leftNode;
                        root.right = rightNode;
                        list.add(root);
                    }
            }
            return list;
        }

     

  • 相关阅读:
    8086 CPU 寄存器
    python中 * 的用法
    字典的相应操作
    tesseract学习记录
    C学习之路2012.8.28
    函数库管理
    2013.3.19C++浏览记录。。。
    自动生成makefile文件学习
    整理做过的东西(电子警察)
    基于zed的tesseract移植过程记录
  • 原文地址:https://www.cnblogs.com/deltadeblog/p/9147203.html
Copyright © 2011-2022 走看看