二叉树非递归遍历的几个要点:
1) 不管前序、中序还是后序,它们的遍历路线(或者说是回溯路线,先沿左边一直走到尽头,然后回溯到某节点,并跳转到该节点的右孩子(如果有的话),然后又沿着这个有孩子的左边一直走到尽头)都是一样的。
2) 明确每次回溯的目的。比如,前序回溯的目的是为了访问右子树;中序回溯的目的是为了先访问根节点,后访问右子树;后序回溯的目的是为了先访问右子树,后访问根节点。
3) 有了1)2)知识之后,就比较容易进行分析。比如,前序中回溯的目的是为了访问右子树,所以当回溯到某点的时获取了该节点的右孩子之后,该节点就没有用了。所以可以直接出栈。中序中回溯到某节点时,访问完根节点并获取右子树之后,该节点也就没用了,可以直接出栈。后序中回溯到某节点时,因为要先访问完右子树后才访问根节点,所以根节点不能立即出栈,而要做一个标记(在其上边放置一个空指针0),当从左子树回溯回来时再访问该节点。
一、二叉树的构造
二、三种方法非递归遍历二叉树
三、main函数测试
四、三种非递归遍历二叉树算法的伪代码