二叉树遍历概念和算法
遍历(Traverse):
所谓遍历(Traversal)是指沿着某条搜索路线,依次对树中每个结点均做一次且仅做一次访问。
从二叉树的递归定义可知,一棵非空的二叉树由根结点及左、右子树这三个基本部分组成。
因此,在任一给定结点上,可以按某种次序执行三个操作:
⑴ 访问结点本身(D),
⑵ 遍历该结点的左子树(L),
⑶ 遍历该结点的右子树(R)。
先序/根遍历DLR:根 左子树 右子树
中序/根遍历LDR:左子树 根 右子树
后根/序遍历LRD:左子树 右子树 根
注意:由于树的递归定义,其实对三种遍历的概念其实也是一个递归的描述过程
算法实现:
二叉树结点类
/**
* 二叉链表的结点
* @author shangyang
*
*
/public class Node {
Object value; // 结点值
Node leftChild; // 左子树的引用
Node rightChild; // 右子树的引用
public Node(Object value) {
super();
this.value = value;
}
public Node(Object value, Node leftChild, Node rightChild) {
super();
this.value = value;
this.leftChild = leftChild;
this.rightChild = rightChild;
}
@Override
public String toString() {
return "Node [value=" + value + ", leftChild=" + leftChild + ", rightChild=" + rightChild + "]";
}
}
二叉树方法接口类
/**
* 二叉树的接口
* 可以有不同的实现类,每个类可以使用不同的存储结构,比如顺序结构、链式结构
* @author shangyang
*
*/
public interfa