二叉树实现
二叉树实现代码
先序遍历顺序
- 首先访问当前节点
- 其他访问左子树(如果存在)
- 最后访问右子树(如果存在)
先序遍历图解

先序遍历代码思路
- 先序遍历可分解为两段
- 沿最左侧通路自顶而下访问各节点
- 借助辅助栈,将访问的节点放入栈中,方便后续自下而上的遍历
- 自底而上遍历对应的右子树
先序遍历代码
public ArrayList<E> travPre() {
LinkedList<Node<E>> stack = new LinkedList<Node<E>>();
ArrayList<E> al = new ArrayList<E>();
Node<E> x = this;
while(true) {
visitAlongLeftBreanch(x,al,stack);
if( stack.isEmpty())
return al;
x = stack.pop();
}
}
private void visitAlongLeftBreanch(Node<E> x,ArrayList<E> al,LinkedList<Node<E>> s) {
while(x != null) {
al.add(x.e);
s.push(x.rc);
x = x.lc;
}
}
迭代版与递归版比较
- 递归版遍历算法时间、空间复杂度的常系数,相对于迭代版更大。
- 递归版本代码相对于迭代版本更加简明
参考资料