1,前中后序顾名思义。在左右递归得前中后输出节点。
前序遍历
public void preOrderTraverse1(TreeNode root) {
if (root != null) {
System.out.print(root.val + "->");//递归之前输出
preOrderTraverse1(root.left);
preOrderTraverse1(root.right);
}
}
中序遍历
public void inOrderTraverse(TreeNode root) {
if (root != null) {
inOrderTraverse(root.left);
System.out.print(root.val + "->");//递归中间输出
inOrderTraverse(root.right);
}
}
后序遍历
public void postOrderTraverse(TreeNode root) {
if (root != null) {
postOrderTraverse(root.left);
postOrderTraverse(root.right);
System.out.print(root.val + "->");//递归之后输出
}
}
增加一个对于中序遍历二叉搜索树的理解吧。中序遍历二叉搜索树,是从小到大输出。
因为二叉搜索树的定义是左节点全部小于当前节点。又结点全部大小当前结点。结合代码来看。
中序遍历。
中序遍历
public void inOrderTraverse(TreeNode root) {
if (root != null) {
//先遍历比root小的
inOrderTraverse(root.left);
System.out.print(root.val + "->");//比root小的遍历完了,输出
inOrderTraverse(root.right);//再遍历比我大的
//当前方法结束回到上一个结点的递归。
}
}
只是加了一些注释。如果还是不明白呢。继续看下面的解释:从根节点出发会一路向左下找到最小的数。最小的树没有左节点输出。也就是我们可以判断一个结点没有左结点或者已经遍历过,那么就是已经处理了比他跟小的。然后就会遍历右节点。一样的道理,优先左节点。这样每一次输出的结点就能确保没有这个结点更小的结点,或者是比他更小的已经处理过了。
所以中序遍历的思想就是找左节点。有就继续找,没有就输出。直到所有的结点的左节点都被判断过。