(1)遇到一个节点,就把它压入栈,并去遍历它的左子节点
(2)如果左子节点存在,继续遍历下一个节点的左子节点,存在则入栈
(3)如果左子节点不存在 则出栈并显示数据 之后去遍历它的右子节点
(4)如果右子节点存在 则将右子节点入栈 然后重复(2) (3)操作
(5)如果右子节点不存在 则将下一个元素出栈 重复(4)操作
代码实现:
//中序遍历非递归实现
void BinaryTree::midOrderTravelsalNotD(TreeNode* node) {
stack<TreeNode*> myStack;
while (node || !myStack.empty())
{
while (node) {
myStack.push(node);
node = node->LChild; //向左边遍历
}
if (!myStack.empty()) //如果数组不为空的话
{
auto temp = myStack.top();
myStack.pop(); //弹出一个元素
cout << temp->data << " ";
free(temp);
node = node->RChild; //转向右子树
}
}
}