二叉树 给定节点数量求二叉树种类

112 阅读1分钟

题目

给定一个非负整数n,返回n个节点一共能构成多少种二叉树

  • 首先base case为当节点数量为0时,只能构成0种,为1时,只能构成1种,为2时能构成2种,当左数的节点数量m时,右树的节点数量为 n - m -1,递归结构为 f(m)*f(m-n-1),遍历规则为从左数0个节点到n-1个节点,右树丛n-1-左数节点到0个节点的所有情况
function process(num) {
  if (num < 0) {
    return 0;
  }

  if (num == 1) {
    return 1;
  }

  if (num == 2) {
    return 2;
  }
  let res = 0;
  for (let i = 0; i <= num - 1; i++) {
    res += process(i) * process(num - i - 1);
  }

  return res;
}