- A+
领500g书库,关注公众号:程叫兽的宝藏 (长按可复制!)
热门下载区==>点此链接进入<<<
目录(点击切换)
本文节选自《计算之魂》电子版:
/第2章//逆向思考一一从递推到递归//中虽然在真实的世界里,并非所有的树都是二叉的,但是在数学上很容易证明,任有有兴趣的读者可以阅读本章的附录三。因此,在计算机科学中,我们只要重点关注和二叉树相关的算法即可。在二叉树的算法中,最重要、最常见的是遍历算法,也就是沿着二叉树的路径,把二叉树的每一个节点都走一遍。图2.8所示为一棵典型的二叉树。为了区别它的每一个节点,我们对这些节点编了号。人遍历这棵树的方法有很多,比如可以自上而下先沿着左边走,一直走到底,再返回到上一个分叉的节点,然后走右边的,当然,如果右边已经没有岔路了,就再往上回溯一级。具体到图2.8,访图2.8典型的二又树问节点的次序是1一2一4一2一5一2一1一3一6一7。对于那些被访问两次或两次以上的节点,我们只保留它第一次被访问的记录,于是图2.8遍历的次序就被记录为1一2一4一5一3一6一7[序列2.1]。当然也可以先右后左,那么图2.8遍历的次序是1一3一6一7一2一5一4[序列2.2]。在上述走法中,我们其实用到了三条简单的规则;1,
计算之魂吴军博士
从上到下顺序访问;2,先左后右〈或者先右后左);3,走到尽头就掉头。这种遍历的方法由于先一口气走到二叉树的最深处,因此被称为深度优先(DepthFirst)遍历算法。我们还可以横着一行行扫描访问每个节点1一2一3一4一5一6一7。这里面的规则更简单:1,将整棵二叉树从上到下分层,逐层扫描;2,每一层从左到右〈当然也可以从右到左)扫描。//计算之魂1/这种遍历的方法由于是先横向扫描,再逐渐走到下一层,因此被称为广度优先(BreadthFirst)遍历算法。不论用哪种方法,让我们人来做这件事,似乎都很容易(虽然速度不够快),但是如果把人的思路用一个程序写出来,这个程序并不好写,因为人做这些事情之所以很容易,是因为占了两个便宜。1,人看得清全图。到什么时候该掉头、什么时候该横向右转很容易看清,但是如果你只能看到前面左右两个分叉,把整个图走一遍则非常困难。但凡走过大迷宫的人都知道其难度比在纸上做一笔画游戏要难得多。2,人的做法其实利用了很多在图中并没有给的信息。比如在前一种做法中,每一个节点的父节点的信息其
计算之魂 epub
实在图中没有直接给出。我们可以看到节点2是节点4的父节点,但是在计算机中,图的描述只有节点4是节点2的左子节点这个信息,关于父节点的信息如果要使用,就必须想办法补回去。在第二种人遍历的过程中,人用到了有关节点的层次,以及从左到右彼此的次序的信息。但是这两个信息在原图中并没有,而且除了兄弟节点,其他节点的左右次序并不好确定,比如确定节点6是节点5同一层右边的节点这件事情就很不容易做到。事实上,接触计算机编程的初学者都会有这样的体会,明明在人看来很直观的方法,用计算机的程序语言就很难实现。这不是程序语言本身功能不够强,而是用它来实现人解题的思路本身就不是一个好主意。我们需要做的是回到原点,站在计算机的角度来考虑这些问题,这样用计算机的程序语言解决问题就顺理成章了。2.2.2”使用递归思想实现二叉树的遍历接下来就让我们看看如何采用递归的思路解决二叉树遍历的问题。首先,对于树的根节点,不管你是否对它做什么处理或操作,你都会遇到它。接下来,我们就需要处理它的左右两棵子树了,根据递归的原理,对待它们的方078
计算之魂 mobi
| 计算之魂怎么样 | 计算之魂的内容 |
| 计算机之魂吴军扫描版 | 计算之魂在线阅读 |
| 计算之魂主要人物性格特点 | 计算机之魂吴军 |
综上:计算之魂网盘值得推荐阅读

