二叉树的非递归遍历C/C++实现:
非递归先序遍历代码:
void PreOrderTraversal (struct tree* root) { //非递归先序遍历
struct tree* temp = root;
while (temp != NULL || S.top > 0) {
while (temp != NULL) {
cout << temp->data << " ";
Push(temp);
temp = temp->left;
}
if (S.top != 0) {
temp = Pop();
temp = temp->right;
}
}
cout << endl;
}
思路:例如上面这棵二叉树,前序遍历的序列为(根-左-右):5 2 3 6 11 4 8;那么首先我们访问到5时先把5输出,然后再入栈,然后再去访问它的左子结点,直到访问到3这个结点往下再没有左结点时把栈顶元素出栈,然后在访问栈顶元素的右子结点。
非递归的中序遍历和后序遍历的思路和前序遍历差不多,大家自己看代码理解领悟,多思考,多动笔画一下结点入栈时栈内元素时怎样的,这样才能更加深入的理解树的遍历。
<