数据结构 ---- 遍历二叉树
遍历方式分类
前序遍历
输出的顺序是:根、左、右
中序遍历
输出的顺序是:左、根、右
后序遍历
输出的顺序是:左、右、根
层序遍历
输出顺序:从上到下,逐层遍历
代码实现
定义二叉树的节点,包含int型的数据,和两个TreeNode型的树节点
// 二叉树的节点
private static class TreeNode {
int data;
TreeNode leftChild;
TreeNode rightChild;
public TreeNode(int data) {
this.data = data;
}
}
构造一个二叉树,输入一个LinkedList,遍历LinkedList中的每一个数据,按顺序为数据构造一个相应的TreeNode节点,并按照先左后右的顺序为节点添加孩子节点
// 构造二叉树
public static TreeNode createBinaryTree(LinkedList<Integer> inputs) {
//若节点为空,则不继续递归
TreeNode node = null;
if (inputs == null || inputs.isEmpty()) {
return null;
}
Integer data = inputs.removeFirst();
if (data != null) {
node = new TreeNode(data);
node.leftChild = createBinaryTree(inputs);
node.rightChild = createBinaryTree(inputs);
}
return node;
}
三种遍历方式:
// 前序遍历
public static void preOrder(TreeNode node){
if (node==null){
return;
}
System.out.println(node.data);
preOrder(node.leftChild);
preOrder(node.rightChild);
}
// 中序遍历
public static void midOrder(TreeNode node){
if (node==null){
return;
}
midOrder(node.leftChild);
System.out.println(node.data);
midOrder(node.rightChild);
}
// 后序遍历
public static void afterOrder(TreeNode node){
if (node==null){
return;
}
afterOrder(node.leftChild);
afterOrder(node.rightChild);
System.out.println(node.data);
}
测试一下:
public static void main(String[] args) {
LinkedList<Integer> inputs = new LinkedList<>(Arrays.asList(
new Integer[]{1,2,4,null,null,5,null,null,3,null,6}
));
TreeNode treeNodes=createBinaryTree(inputs);
System.out.println("前序遍历结果:");
preOrder(treeNodes);
System.out.println("中序遍历结果:");
midOrder(treeNodes);
System.out.println("后序遍历结果:");
afterOrder(treeNodes);
}
最终的树结构:
打印输出结果:
与上面图中的结果相同,遍历成功!
记录一下!!!