如何在不递归的情况下遍历二叉搜索树?
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。
我可以很容易地使用递归遍历二叉搜索树,但是我对不使用递归遍历一无所知所以请任何人解释一下,.....
是的,你可以用堆栈来完成。您必须在此处采用堆栈算法,以二叉搜索树的迭代方式(非递归 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。