统计和生成所有的不同的二叉树
来源:互联网 发布:java 注解用处 编辑:程序博客网 时间:2024/06/16 13:04
import java.util.LinkedList;import java.util.List;/** * Created by lxw, liwei4939@126.com on 2017/11/7. * 统计和生成所有的不同的二叉树 * 给定一个整数N,N<1代表空树结构,否则代表中序遍历的结果, * 返回可能的二叉树结构有多少种 * * N含义不变,假设二叉树结构有M种,返回M个二叉树的头结点 */public class countAndGenerateBST { public class Node{ public int value; public Node left; public Node right; public Node(int data){ this.value = data; this.left = null; this.right = null } } public int numTrees(int n){ if(n <2){ return 1; } int[] num = new int[n+1]; num[0] = 1; for (int i=1; i< n+1; i++){ for (int j=1; j< i+1; j++){ num[i] += num[j-1] * num[i- j]; } } return num[n]; } public List<Node> generateTrees(int n){ return generate(1, n); } public List<Node> generate(int start, int end){ List<Node> res = new LinkedList<Node>(); if(start > end){ res.add(null); } Node head = null; for (int i=start; i< end +1; i++){ head = new Node(i); List<Node> lSub = generate(start, i-1); List<Node> rSub = generate(i+1, end); for (Node l : lSub){ for (Node r : rSub){ head.left = l; head.right = r; res.add(cloneTree(head)); } } } return res; } public Node cloneTree(Node head){ if(head == null){ return null; } Node res = new Node(head.value); res.left = cloneTree(head.left); res.right = cloneTree(head.right); return res; }}
阅读全文
0 0
- 统计和生成所有的不同的二叉树
- 统计和生成不同的二叉树
- 求出所有不同的二叉搜索树(BST)
- 二叉树问题---统计所有可能的二叉树结构的种数
- C++之统计二叉树中路径和为定值的所有路径(24)---《那些奇怪的算法》
- 统计输入中所有单词出现的次数(使用二叉查找树实现:递归和非递归)
- 统计所有单词出现的次数:二叉数
- 二叉树的生成和遍历
- 线索二叉树的生成和遍历
- 二叉树的生成和遍历
- 二叉树的生成和遍历
- 二叉树的生成和递归遍历
- 不同的二叉查找树
- 不同的二叉查找树
- 不同的二叉查找树
- 不同的二叉查找树
- 二叉树的所有路径
- 二叉树的所有路径
- 循环神经网络(Recurrent Neutral Network)RNN介绍
- ”向终身学习者致敬”
- 利用python将所有时序NDVI影像转换为DataFrame数据并进行归一化
- opj 7221 拯救公主
- 输入年月日判断是第几天
- 统计和生成所有的不同的二叉树
- linux系统中struct timeval结构体、struct timezone结构体以及gettimeofday函数
- Vue
- Hashcode的作用
- Android线程间通信--- eventbus3.0的简单使用
- 一个程序员到一个销售高手的心路历程
- java i++ 并非原子操作的解决方法——用AtomicInteger
- 搬家到简书...
- android AIDL IPC深入分析