目录(点击切换)
本文节选自《计算之魂》电子版:
/第2章/逆向思考一一从递推到递归1/法和对待整棵二及树的方法是一样的,于是遍历左、右子树时让其递归调用自己就可以了。当然,这样调用总要有一个结束条件,那就是在遇到空树时直接返回。根据这个思想,深度优先遍历的算法可以用下面的伪代码来实现。算法2.2树的深度优先遍历DepthFirstTraverseTree(BinaryTreetree){寺2if(tree=NIL)return;//如果树为空,不做任何事,直接返匠3DepthFirstTraverseTree(tree.1eft_subtree);//遍历左子树46PrintNode();//对当前节点做相应的处理,比如打印当前节点的信息TraverseTree(tree.right_subtree);//遍历右子树】执行上述代码,得到的结果就是序列2.1。在上述算法的3、4、5三个步骤中,先遍历左子树,再处理根节点,最后遍历右子树,这种做法被称为中序遍历。当然,可以先处理根节点信息,再遍历左、右子树,这种遍历就叫作先序遍历;与之类似,如果先遍历左、右子树,最后处理根节点信息,则被称为后序遍历。这两种变通算法和上述算法很相似,我们将它们留作思考题。为了
计算机之魂
便于进一步理解上述递归算法是怎么实现的,下面用图2.8中的那棵二叉树说明一下程序中的调用关系。我们把以第;个节点为根的子树写成treeji。调用DepthFirstTraverseTree《七节合全二调用DepthFirstTraverseTree(tree_2);//算法2.2的第3步调用DepthFirstTraverseTree(tree_4);//算法2.2的第3步调用pepthFirstTraverseTree(NIL),返回上一层;//tree_4的左子树为NIL处理节点4://算法2.2的第4步调用pepthFirstTraverseTree(NIL),返回上一层;//tree_4的右子树为NIL返回上一层,回到节点2处理节点2;//算法2.2的第4步oovBhUm中mmIN上哺079//计算之奸//9调用pepthFirstTraverseTree(tree_5)//算法2.2的第5步10调用pepthFirstTraverseTree(NIL),返回上一层://tree_5的左子树为NIL11处理节点5//算法2.2的第4步12调用DepthFirstTraverseTree(NIL),
计算之魂吴军epub
返回上一层;//tree_5的右子树为NIL13返回上一层,回到节点2;14返回上一层,回到节点1;处理节点1;/V/算法2.2的第4步16调用DepthFirstTraverseTree(tree_3);//算法2.2的第5步L525(由节点6)返回节点3;26处理节点3;//算法2.2的第4步27调用DepthFirstTraverseTree(NIL),返回上一层;//tree_3的右子树为NIL可节点3;可节点1://程序结束2829如果你接受了递归的思维方式,那么就会觉得二又树的深度优先遍历在计算机算法中属于非常简单的。但是,如果你停留在由浅入深循环的思维方式上,这个算法理解起来还是有点困难。要想在计算机科学领域做到随心所欲,必须转换我们人类固有的思维方式。做到这一点,就有成为四级工程师的可能性了。在上面的程序执行过程中,同一个算法实际上是在层层调用,然后到了叶节点后逐一返回,直到树的根节点。要让计算机运行这个程序,就需要一个特殊的数据结构支撑,它就是我们下面要讲到的堆栈了。二又树、深度优先遍历。思考题2.2Q1,修改中序遍历算法2.2,将它变成先序遍历或者后序遍历算法。(禄语洁演仑)080
计算之魂吴军在线阅读
| 计算之魂 吴军 下载 | 计算之魂介绍 |
| 计算之魂和数学之美 | 计算之魂吴军笔记 |
| 计算之魂介绍 | 计算机之魂 |
综上:计算之魂吴军下载值得推荐阅读

评论已关闭!