二叉树的遍历-模拟系统栈

为什么要使用模拟系统栈

相比于用栈来进行二叉树的非递归遍历实现,用系统栈更加的简单直观,而且对于三种遍历都有着相同的形式

模拟系统栈进行二叉树遍历

将结点赋予一个状态值,0代表输出当前结点,1代表递归处理。

class TreeNode:
    def __init__(self, x):
        self.val = x
        self.left = None
        self.right = None


class Solution:

    def inorderTraversal(self, root: TreeNode) -> List[int]:
        if not root:
            return []
        # 1 表示递归处理
        stack = [(1, root)]
        res = []
        while stack:
            command, node = stack.pop()
            if command == 0:
                # 0 表示当前马上执行将结点的值添加到结果集中
                res.append(node.val)
            else:
                # 关键在这里:因为是模拟系统栈,应该把中序遍历的顺序倒过来写
                # 调整一下顺序就可以完成前序遍历和后序遍历
                if node.right:
                    stack.append((1, node.right))
                stack.append((0, node))
                if node.left:
                    stack.append((1, node.left))
        return res
发布了11 篇原创文章 · 获赞 17 · 访问量 3112

猜你喜欢

转载自blog.csdn.net/weixin_43208423/article/details/102338248