数据结构—二叉树的前中后序非递归遍历及层序遍历
之前已经写过一篇关于二叉树的文章,当时是用C语言实现了二叉树的建立以及前中后序递归遍历.
递归有一个好处就是:实现代码非常简单,也容易看懂.但很多情况先,递归所消耗的资源是与其他方式相比是比较大的,所以几天就来说一下二叉树前中后序遍历的非递归写法(java实现)
1.节点的数据结构:
class TreeNode {
private int data;
private TreeNode leftChild;
private TreeNode rightChild;
public TreeNode() {
}
public TreeNode(int data) {
this.data = data;
leftChild = null;
rightChild = null;
}
@Override
public String toString() {
return " " + data;
}
}
2.非递归前中后遍历
- 首先大概说一下思路,我们前面之所以用递归的方式去遍历二叉树,是因为递归时 函数调用的层次关系能够保证记忆性,即:如果是中序遍历,那么我们遍历完一个节点的左子树后还可以回到这个根节点,然后再去遍历这个节点的右子树.
- 那么这样的规律我们对应的就能想到栈这个数据结构,对应的:在中序遍历时,先将一个节点压栈,在遍历完其左子树后,弹栈并遍历其右子树.下面是其代码实现
/**
* 非递归前序遍历
* @pa