求出所有不同的二叉搜索树(BST)
来源:互联网 发布:ikbc c87换mac键位 编辑:程序博客网 时间:2024/06/07 04:02
问题:给定一个数n,生成n个节点,节点值分别为1,2,...,n,要求生成这n个节点的所有结构不同的二叉搜索树。
比如,给定一个数n=3,你的程序应该生成5个不同的BST,如下所示:
1 3 3 2 1 \ / / / \ \ 3 2 1 1 3 2 / / \ \ 2 1 2 3
二叉树的结构如下:
//Definition for binary treepublic class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; }}
解法:对于二叉树的许多问题都可以用递归进行解决。可以分析出,对于1...n中的任一个数i,有1,...,(i-1)等节点肯定位于i节点的左侧,(i+1),...,n等节点肯定位于i节点的右侧,如果能够把i节点的所有左侧分支树和右侧分支树的结构求出来,那所有以i节点为根的树的结构也就求出来了。很明显,使用递归可以完成。
public class Solution { public List<TreeNode> generateTrees(int n) { return genTrees(1,n); } public List<TreeNode> genTrees (int head, int tail){ List<TreeNode> list = new ArrayList<TreeNode>(); if(head>tail){ list.add(null); return list; } for(int i=head; i<=tail; i++){ List<TreeNode> leftpart,rightpart; leftpart = genTrees(head, i-1); rightpart = genTrees(i+1, tail); for(TreeNode lnode : leftpart){ for(TreeNode rnode : rightpart){ TreeNode node = new TreeNode(i); node.left = lnode; node.right = rnode; list.add(node); } } } return list; }}
0 0
- 求出所有不同的二叉搜索树(BST)
- BST 二叉搜索树
- 二叉搜索树BST
- 二叉搜索树BST
- 二叉搜索树(BST)
- BST-搜索二叉树
- BST二叉搜索树
- BST二叉搜索树的实现
- 二叉搜索树(BST)的基本操作
- BST二叉搜索树的查找算法
- 【C++】实现的二叉搜索树BST
- 搜索二叉树(BST)的实现
- 二叉搜索树BST的C++实现
- 二叉搜索树(BST)的基本操作
- BST(二叉树搜索树)
- 二叉搜索树(BST树)
- *BST(二叉搜索树)
- 二叉搜索树(BST)
- js学习笔记-函数表达式
- 使用TFHpple库解析HTML和XML
- 蓝桥杯 三角螺旋阵 递归
- javascript中的事件冒泡
- PHP代码优化24条真经
- 求出所有不同的二叉搜索树(BST)
- imageNamed与imageWithContentsOfFile加载图片的区别
- 猴子搬香蕉问题
- Android的线程与进程
- MFC 详解一之重要的类
- jQuery.ajax向后台传数组
- HTML5新特性——HTML5 地理定位
- sqlserver 检查表索引及sql语句执行情况
- Linux那些事儿 之 戏说USB(13)接口是设备的接口(二)