请问老师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回答

liuyubobobo

2018-01-07

没有隐患!这样做就是我在课程中说的通常的教科书的实现:)


但是,这样做的缺点是,你会发现实现非递归的中序遍历和后序遍历,逻辑和这样的非递归前序遍历很不一样。在这里我使用Command这个结构体,前中后序的非递归遍历将和递归遍历一样,代码的改动量非常小,实质我这样做,stack是在模拟计算机的指令栈,所以这个栈中的元素,我管他叫Command。


对于二叉树的前中后序遍历,一般教科书不会使用我的这个方法。所以印象里在这一小节我提到过,建议大家掌握教科书的方法,同时也能理解一下我的做法,相信会对递归转非递归有更深入的认识:)


加油!

1
2
liuyubobobo
回复
Nelson_Zhao
大赞!加油!
2018-01-09
共2条回复

玩转算法面试-- Leetcode真题分门别类讲解

课程配套大量BAT面试真题,高频算法题解析,强化训练

7408 学习 · 1150 问题

查看课程