二叉树遍历

336 阅读1分钟

二叉树遍历

  • 先序
  • 中序
  • 后序
  • 层次

二叉树结点

import lombok.Data;
@Data
public class TreeNode {
    private String value;
    private TreeNode left;
    private TreeNode right;
    public TreeNode(String value) {
        this.value = value;
    }
}

手动生成图中二叉树

        TreeNode treeNode1 = new TreeNode("F");
        TreeNode treeNode2 = new TreeNode("B");
        TreeNode treeNode3 = new TreeNode("G");
        TreeNode treeNode4 = new TreeNode("A");
        TreeNode treeNode5 = new TreeNode("D");
        TreeNode treeNode6 = new TreeNode("I");
        TreeNode treeNode7 = new TreeNode("C");
        TreeNode treeNode8 = new TreeNode("E");
        TreeNode treeNode9 = new TreeNode("H");
        treeNode1.setLeft(treeNode2);
        treeNode1.setRight(treeNode3);
        treeNode2.setLeft(treeNode4);
        treeNode2.setRight(treeNode5);
        treeNode5.setLeft(treeNode7);
        treeNode5.setRight(treeNode8);
        treeNode3.setRight(treeNode6);
        treeNode6.setLeft(treeNode9);

先序遍历

  • 根节点 -> 左结点 -> 右结点
  • 输出结果 -> F B A D C E G I H
    public static void preOrder(TreeNode treeNode) {
        if (treeNode == null) {
            return;
        }
        System.out.print(treeNode.getValue() + " ");
        preOrder(treeNode.getLeft());
        preOrder(treeNode.getRight());
    }

中序遍历

  • 左结点 -> 根节点 -> 右结点
  • 输出结果 -> A B C D E F G H I
    public static void midOrder(TreeNode treeNode) {
        if (treeNode == null) {
            return;
        }
        midOrder(treeNode.getLeft());
        System.out.print(treeNode.getValue() + " ");
        midOrder(treeNode.getRight());
    }

后序遍历

  • 右结点 -> 左结点 -> 根节点
  • 输出结果 -> A B C D E G H I F
    public static void midOrder(TreeNode treeNode) {
        if (treeNode == null) {
            return;
        }
        midOrder(treeNode.getLeft());
        System.out.print(treeNode.getValue() + " ");
        midOrder(treeNode.getRight());
    }

层序遍历

  • 输出结果 -> F B G A D I C E H
    public static void levelOrder(TreeNode treeNode) {
        Queue<TreeNode> queue = new LinkedList<>();
        queue.add(treeNode);
        while (!queue.isEmpty()) {
            TreeNode temp = queue.poll();
            System.out.print(temp.getValue() + " ");
            if (temp.getLeft() != null) {
                queue.add(temp.getLeft());
            }
            if (temp.getRight() != null) {
                queue.add(temp.getRight());
            }
        }
    }