二叉树实现
二叉树实现代码
中序遍历顺序
- 首先访问当前节点的左子树(如果存在)
- 再访问当前节点
- 最后访问右子树(如果存在)
中序遍历图解
中序遍历代码思路
- 中序遍历可分解为d+1段
- 沿最左侧通路自底而上访问各节点
- 自底而上遍历对应的右子树
中序遍历代码
public ArrayList<E> travIn() {
LinkedList<Node<E>> stack = new LinkedList<Node<E>>();
ArrayList<E> al = new ArrayList<E>();
Node<E> x = this;
while(true) {
goAlongLeftBreanch(x,stack);
if(stack.isEmpty())
return al;
x = stack.pop();
al.add(x.e);
x = x.rc;
}
}
rivate void goAlongLeftBreanch(Node<E> x,LinkedList<Node<E>> s) {
while(x != null) {
s.push(x);
x = x.lc;
}
}
迭代版与递归版比较
- 递归版遍历算法时间、空间复杂度的常系数,相对于迭代版更大。
- 递归版本代码相对于迭代版本更加简明
参考资料