版权声明:本文为博主原创文章未经博主允许不得转载。 /qq/article/details/
二叉树前中后序遍历——迭代和栈方式实现
用递归实现三种遍历方式只需改变递归顺序就可以实现任一顺序的遍历而使用栈方式,则不同情况需要进行不同的考虑
首先,定义一个简单的二叉树节点的数据结构类:
然后初始化一个二叉树(这裏是一个二叉查找树1,2,3,4,5,6,7)
* 迭代方式很好理解,先根节点再左,再右 * 每次输出根节点在输出左节点和右节点。步骤如下: * 1、若栈非空输出根节点并出栈 * 2、将右节点压栈(如果存在) * 3、将左节点压栈(如果存在) * 4、重复第1步直到栈空 * 先调用左节点,再调用根节点再调用右節点 * 栈的中序遍历需要套两层循环,由于需要先输出左节点必须向下查找直到左节点为空才能输出。 * 1、如果栈顶元素非空且左节点存在将其入栈,重复该过程若不存在则进入第2步 * 2、若栈非空,输出栈顶元素并出栈判断刚出栈的元素的右节点是否存在,不存在重复第2步存在则将右节点入栈,跳至第1步 * 需要增加一个节点记录用于记录上次出栈的节点 * 1、如果栈顶元素非空且左节点存在,将其入栈重複该过程。若不存在则进入第2步(该过程和中序遍历一致) * 2、判断上一次出栈节点是否当前节点的右节点或者当前节点是否存在右节点,满足任一条件将当前节点输出,并出栈否则将右节点压栈。跳至第1步很显然二叉查找树的中序遍历是有序的。
先序和后序不能唯一确定二叉树
先序和中序,能唯一确定二叉树
后序和中序能唯一确定二叉树
先序、中序相同时,二叉树没有左子树
后序、中序相同时二叉树没有右子树
后序、先序相同时,只有一个根节点