Lintcode164 Unique Binary Search Trees II solution 题解

来源:互联网 发布:琉璃神社新域名 编辑:程序博客网 时间:2024/06/03 03:28

【题目描述】

Given n, generate all structurally unique BST's(binary search trees) that store values 1...n.

给出n,生成所有由1...n为节点组成的不同的二叉查找树

【题目链接】

www.lintcode.com/en/problem/unique-binary-search-trees-ii/

【题目解析】

这道题与 Unique Binary Search Trees 的方法同样是动态规划。

在做 Unique Binary Search Trees 这道题时,我们用一个数组保存 1 至 n-1 对应的不同二叉树的个数 X1、X2、X3、... Xn-1,

则 n 对应的不同二叉树个数Xn= Xn-1+ X1*Xn-2+ X2*Xn-3+ X3*Xn-4+ ... + Xn-2*X1+ Xn-1

通过这个递推式,我们可以从 N = 1 开始递推,最后得到 N = n 时不同二叉查找树的个数。

与上述思路类似,我们可以通过深度优先搜索(递归)解决这道题。

因为二叉查找树满足父节点的值大于左子节点的值,小于右子节点的值,所以我们可以:

(1) 从 N=1 开始构建二叉查找树,则它的左子树节点数为 0,右子树节点数为 n-1;

(2) N=2 时,左子树节点数为 1,右子树节点数为 n-2;

……

(n) N=n 时,左子树节点数为 n-1,右子树节点数 0。

而在第(1)步中,右子树继续执行上述循环,子树的子树又执行这个循环,最终,我们可以将子树节点数减少到 1,而一个节点只有一种排列方式,所以此时可以毫不犹豫地将结果返回给上一级。然后包含有两个节点的二叉树排列方式又被返回给上一级。……

依此类推,我们最后可以得到所有不同结构的二叉查找树。

【参考答案】

www.jiuzhang.com/solutions/unique-binary-search-trees-ii/