回溯法与树的遍历 - 求幂集

2018-07-26  本文已影响15人  半亩房顶

树是一个很重要的数据结构,其实越来越会发现它的模型在很多地方都能看的到。

树的遍历方法请记住,先序,中序,后序,这个先后指的是在遍历过程中,根节点扫描的优先级。
三种遍历的代码就不写了,一捞一大把呀。
还有一个特殊的赫夫曼树,感觉有用。emmm,感觉,,,

回溯的过程其实就是对于一个“状态树”的遍历,带着规则,在这个树上遍历的时候,就能够得到想要的解,可能是一个最优解,也可能是一组解。

问题说明,一个集包含三个元素(A,B,C),求其幂集
这里使用二叉树来表示子集中是否包含三个元素是很简单和方便的思路,最终得到状态树如下图。我的灵魂之作总是这么完美~~


灵魂画师之幂集状态树

此时使用回溯法就可以得到其子集了,当你考虑完三个元素的取舍的时候,在状态图中,最下层的子节点们就是所有的解了,因为最下层的所有节点都是在对于上面节点的情况的进一步取舍之后才得到的。

说着说着感觉,emmm,我为什么要写这篇笔记,是不是太简单了,,?嘛,扔代码溜了

void PowerSet(int i, int n) {
    //初始调用 PowerSet(i,n);
    if (i > n)  {//注意这个条件以及初始调用
        //取舍完最后一个元素的时候
                输出元素
    } else {
        //取第 i 个元素
        PowerSet(i +1 ,n);
        //舍第 i 个元素
        PowerSet(i + 1,n);
    }
}
上一篇下一篇

猜你喜欢

热点阅读