递归和迭代在图遍历中的对比-栈结构
递归和迭代在图遍历中的对比-栈结构
做了两道图遍历相关的题,分别是Leetcode230. Kth Smallest Element in a BST,Leetcode785. Is Graph Bipartite?,
这两道题都可以用递归和迭代两种方法来处理,然后有了一些细究下去的想法
为防止以后找不到,把思考的结论单独开一篇放在这里
注:由于只是从两道题中得来的结论,可能以偏概全,如果有错误或缺漏,请评论指出
递归和迭代
递归和迭代好像总是如影相随,细想一想:
递归的实现,也是借助于栈,只不过在程序中不可见,栈中保存的是当前节点的所有父节点,是访问到当前节点的路径,记忆的是来路,同级的兄弟节点是没有保存到栈中的
而迭代中的栈在程序中可见,直接拿出来用,用来保存当前节点的所有子节点,然后在访问的时候,由于当前节点已经弹出,所以,记忆的是去路
总结一下
栈的级别 | 栈在程序中是否可见 | 栈中保存的记忆 | 是否保存同级节点 | |
---|---|---|---|---|
递归 | 编译器 | 否 | 父节点,来路 | 否 |
迭代 | 用户程序 | 是 | 子节点,去路 | 是 |