请问老师6-3这里使用Command结构是为了更好地模拟程序入栈,还是它们有必要的用途呢?
来源:6-3 运用栈模拟递归
Nelson_Zhao
2018-01-07
stack<TreeNode*> stack; stack.push(root); while( !stack.empty() ){ TreeNode* node = stack.top(); stack.pop(); if( node->right != NULL ) stack.push( node->right ); if( node->left != NULL ) stack.push( node->left ); res.push_back( node->val ); }
老师好,我最近在准备面试,也再次把这些题在Leetcode中刷了一遍。做144题的时候为了保证速度,我按照自己的思路构建一个栈,直接把TreeNode指针推入栈中,没有设计Command这样的结构,是否有隐患呢?
代码如上。谢谢老师!
写回答
1回答
-
没有隐患!这样做就是我在课程中说的通常的教科书的实现:)
但是,这样做的缺点是,你会发现实现非递归的中序遍历和后序遍历,逻辑和这样的非递归前序遍历很不一样。在这里我使用Command这个结构体,前中后序的非递归遍历将和递归遍历一样,代码的改动量非常小,实质我这样做,stack是在模拟计算机的指令栈,所以这个栈中的元素,我管他叫Command。
对于二叉树的前中后序遍历,一般教科书不会使用我的这个方法。所以印象里在这一小节我提到过,建议大家掌握教科书的方法,同时也能理解一下我的做法,相信会对递归转非递归有更深入的认识:)
加油!
122018-01-09
相似问题