接前一篇二叉树的创建, https://blog.csdn.net/jian876601394/article/details/105478477
创建好二叉树后,这次进行二叉树的深度遍历(前序、中序、后序)
/**
* 前序遍历, 父-左-右
*
* @author DangerShi
* @param treeNode
*/
public void preOrderTraverse(TreeNode treeNode) {
if (treeNode == null) {
return;
}
// 输出节点数据(或对数据进行其他操作)
System.out.println(treeNode.data);
// 遍历左子树
preOrderTraverse(treeNode.left);
// 遍历右子树
preOrderTraverse(treeNode.right);
}
/**
* 中序遍历, 左-父-右
*
* @author DangerShi
* @param treeNode
*/
public void inOrderTraverse(TreeNode treeNode) {
if (treeNode == null) {
return;
}
// 遍历左子树
inOrderTraverse(treeNode.left);
// 输出节点数据(或对数据进行其他操作)
System.out.println(treeNode.data);
// 遍历右子树
inOrderTraverse(treeNode.right);
}
/**
* 后序遍历, 左-右-父
*
* @author DangerShi
* @param treeNode
*/
public void postOrderTraverse(TreeNode treeNode) {
if (treeNode == null) {
return;
}
// 先遍历左子树
postOrderTraverse(treeNode.left);
// 再遍历右子树
postOrderTraverse(treeNode.right);
// 输出节点数据(或对数据进行其他操作)
System.out.println(treeNode.data);
}
/**
* 层序遍历,借助队列来实现
* 将node放入队列,取出node.data,若node有子节点,则将子节点放入队列;
* 重复该步骤,直到队列为空
*
* @author DangerShi
* @param treeNode
*/
public void sequenceTraverse(TreeNode treeNode) throws InterruptedException {
if (treeNode == null) {
return;
}
Queue<TreeNode> queue = new LinkedBlockingQueue<>();
queue.add(treeNode);
while (!queue.isEmpty()) {
TreeNode node = queue.poll();
System.out.println(node.data);
if (node.left != null) {
queue.add(node.left);
}
if (node.right != null) {
queue.add(node.right);
}
}
}
@Test
public void test() throws InterruptedException {
/**
* 1
* 2 3
* 4 5 6 7
*/
TreeNode treeNode = arrayToBTree(new Object[]{1,2,3,4,5,6,7});
System.out.println("----前序遍历----");
preOrderTraverse(treeNode);
System.out.println("----中序遍历----");
inOrderTraverse(treeNode);
System.out.println("----后序遍历----");
postOrderTraverse(treeNode);
System.out.println("----层序遍历----");
sequenceTraverse(treeNode);
}