版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。
顺序存储的二叉树结构利用数组给满二叉树进行编号,而实际情况中的二叉树不满足满二叉树和完全二叉树,因此会导致内存空间的浪费,所以本文采用链表的存储方式,定义树节点结构体,包含数据和两个左右儿子指针。类的成员变量只有树的根节点,成员函数包括插入、前中后序遍历,这里遍历的方式采用经典的递归遍历,递归遍历的方式容易理解一些,非递归的方法需要利用栈结构保存父节点,这是下一步实现的内容。
通过编辑增加了二叉树非递归成员函数,非递归的前序和中序遍历比较容易实现,分别在入栈和出栈的时候访问数据,在实际操作当中的关键问题理解,个人感觉主要是嵌套的两层while循环,内层循环用于树的左节点的访问并将其压入栈中,外层循环用于访问右节点和弹出栈中存储节点,解决这个问题就能理解非递归了。对于非递归后续遍历需要对栈中数据根据是否访问了有节点进行标记,从而在访问右节点之后打印数据,代码实现以后再更新吧。
再次更新的内容为非递归后续遍历的方法,其实就是在非递归前序和中序遍历方法基础上,增加一个标记栈,记录遍历过程中是否已经访问了右节点,当树节点入栈的时候,未访问标记布尔变量入栈,当访问了右节点之后标记布尔变量改变值。