(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;   //转向右子树
		}
	}
} 










