All Possible Full Binary Trees
Thougts
Code
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
Map<Integer, List<TreeNode>> cache = new HashMap<>();
public List<TreeNode> allPossibleFBT(int N) {
if (cache.containsKey(N)) {
return cache.get(N);
}
List<TreeNode> res = new ArrayList<>();
if (N == 1) {
res.add(new TreeNode(0));
} else if ((N & 1) == 1) {
for (int x = 1; x < N; x++) {
int y = N - x - 1;
for (TreeNode left : allPossibleFBT(x)) {
for (TreeNode right : allPossibleFBT(y)) {
TreeNode root = new TreeNode(0);
root.left = left;
root.right = right;
res.add(root);
}
}
}
}
return res;
}
}Analysis
Last updated