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

时间:2015-10-08 17:33:49

标签: recursion tree binary-search-tree traversal

我可以轻松地使用递归遍历二叉搜索树,但是我没有关于遍历的想法而没有递归,所以请任何人解释,.....

1 个答案:

答案 0 :(得分:3)

是的,你可以用堆栈来做。你必须在这里使用二进制搜索树的迭代方式(非递归方式/方法)进行重新排序,有序和后序遍历的算法。希望你能得到正确的待遇。

重新订购:

1)创建一个空堆栈node_Stack并将根节点推送到堆栈。

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

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

- >将弹出项目的右子项推送到堆栈

- >将弹出项目的左子项推送到堆栈

<强>有序:

1)创建一个空堆栈。

2)以root身份初始化当前节点

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

4)如果current为NULL并且堆栈不为空,那么

 -> Pop the top item from stack.

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

 -> Go to step 3.

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

<强>阶交

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从堆栈弹出一个项目并将其设置为root。

-> 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。