如何在不递归的情况下遍历二叉搜索树?

How can I traverse binary search tree without recursion?

我可以很容易地使用递归遍历二叉搜索树,但是我对不使用递归遍历一无所知所以请任何人解释一下,.....

是的,你可以用堆栈来完成。您必须在此处采用堆栈算法,以二叉搜索树的迭代方式(非递归 way/method)进行 p 重新排序、in-order 和 post-order 遍历。希望你能得到妥善处理。

重新下单:

1) 创建一个空堆栈node_Stack 并将根节点压入堆栈。

2) node_Stack 不为空时执行以下操作。

-> 从堆栈中弹出一个项目并打印它。

-> 将弹出项向右 child 推入堆栈

-> 将弹出项向左 child 推入堆栈

in-order:

1) 创建一个空栈S.

2) 将当前节点初始化为root

3) 将当前节点推送到S,设置current = current->left 直到current为NULL

4) 如果当前为 NULL 且堆栈不为空则

 -> Pop the top item from stack.

 -> Print the popped item, set current = popped_item->right 

 -> Go to step 3.

5) 如果当前为 NULL 且堆栈为空,那么我们就完成了。

post-order:

1.1 创建一个空栈

2.1 当 root 不为 NULL 时执行以下操作

-> Push root's right child and then root to stack.

-> Set root as root's left child.

2.2 从堆栈中弹出一个项目并将其设置为根。

-> If the popped item has a right child and the right child 
   is at top of stack, then remove the right child from stack,
   push the root back and set root as root's right child.

-> Else print root's data and set root as NULL.

2.3 堆栈不为空时重复步骤2.1和2.2。