在数据结构中,为什么在进行非递归中序遍历的时候需要先判断栈不为空呢?栈为空就不能压栈吗?

2025-06-20 12:26:03
推荐回答(1个)
回答1:

在二叉搜索树中,中序遍历实际上就是将每个节点的权值由小到大排序。
对于每一个非根节点,在通过其父节点遍历它时将其压入栈,在即将遍历其右子树时退栈。按照这种方式,一开始栈为空,先将根节点压入栈开始遍历,到整棵树中权值最大的节点(也就是最“右”的节点)被遍历结束。
具体过程是:对于栈顶的节点,将其左节点压入栈。如果没有左节点或左节点已被访问,就退栈并压入右节点。可以说,每个节点都是由于栈顶节点存在而被压入栈中。如果栈为空,就没有节点可以再被压入,遍历结束。