美文网首页
枚举二叉树

枚举二叉树

作者: 赵枝阳 | 来源:发表于2019-05-08 15:33 被阅读0次

    有1-n个节点, 每两个节点可以合并产生一个新的节点, 枚举一下这样的二叉树。

    思路: 采用递归的方式, 每次选择已有的节点里面选择两个点进行合并,

    最多有2*n-1个节点(满二叉树的性质),define maxn = 2 * n;

    cur = n

    for (int i = 0; i < n; i++) {

        ok[i++] = 1;

    }

    build_tree(1)

    void build_tree(dep) {

        if (dep == n) return;

        for (int i = 0; i < maxn; i++) {

            if (ok[i]) {

                for (int j = 0; j < maxn; j++) {

                    if (ok[j] && i != j) {

                        ok[i] = ok[j] = 0;

                        int id = cur++;

                        w[id ] = w[i] + w[j];

                        ok[id] = 1;

                        build_tree(dep + 1);

                        ok[cur--] = 0;

                        ok[i] = ok[j] = 1;

                }

            }

        }

    }

    }

    相关文章

      网友评论

          本文标题:枚举二叉树

          本文链接:https://www.haomeiwen.com/subject/jtzmoqtx.html