二叉树前序中序后序遍历

二叉树遍历:

  1. 创建一棵二叉树
  2. 前序遍历
    1. 先输出当前节点(初始的时候是root节点)
    2. 如果左节点不为空,则递归继续前序遍历
    3. 如果右子节点不为空,则递归继续前序遍历
  3. 中序遍历
    1. 如果当前节点的左子节点不为空,则递归中序遍历
    2. 输出当前节点
    3. 如果当前节点的右子节点不为空,则递归中序遍历
  4. 后序遍历
    1. 如果当前节点的左子节点不为空,则递归后序遍历
    2. 如果当前节点的右子节点不为空,则递归右子节点
    3. 输出当前节点
package tree;

public class BinaryTreeDemo {
    public static void main(String[] args) {
        // 创建二叉树
        BinaryTree binaryTree = new BinaryTree();
        // 创建需要的节点
        Node1 root = new Node1(1,"a1");
        Node1 n2 = new Node1(2,"a2");
        Node1 n3 = new Node1(3,"a3");
        Node1 n4 = new Node1(4,"a4");
        // 说明,我们先手动创建二叉树,后面使用递归创建二叉树
        root.setLeft(n2);
        root.setRight(n3);
        n3.setRight(n4);
        binaryTree.setRoot(root);
        // 测试
        System.out.println("前序遍历:");
        binaryTree.preOrder(); // 1 2 3 4
        System.out.println("中序遍历 ");
        binaryTree.infixOrder(); // 2 1 3 4
        System.out.println("后序遍历:");
        binaryTree.postOrder(); // 2 4 3 1
    }
}
class BinaryTree{
    private Node1 root;

    public Node1 getRoot() {
        return root;
    }

    public void setRoot(Node1 root) {
        this.root = root;
    }

    // 前序遍历
    public void preOrder(){
        if (this.root != null){
            this.root.preOrder();
        }else{
            System.out.println("二叉树为空");
        }
    }
    // 中序遍历
    public void infixOrder(){
        if (this.root != null){
            this.root.infixOrder();
        }else{
            System.out.println("二叉树为空");
        }
    }
    // 后序遍历
    public void postOrder(){
        if (this.root != null){
            this.root.postOrder();
        }else{
            System.out.println("二叉树为空");
        }
    }
}
// 先创建节点
class Node1{
    private int id;
    private String name;
    private Node1 left;
    private Node1 right;

    public Node1(int id, String name) {
        this.id = id;
        this.name = name;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Node1 getLeft() {
        return left;
    }

    public void setLeft(Node1 left) {
        this.left = left;
    }

    public Node1 getRight() {
        return right;
    }

    public void setRight(Node1 right) {
        this.right = right;
    }

    @Override
    public String toString() {
        return "Node1{" +
                "id=" + id +
                ", name='" + name + '\'' +
                '}';
    }
    // 编写前序遍历
    public void preOrder(){
        System.out.println(this); //  先输出当前节点
        // 递归向左子树前序遍历
        if (this.left != null){
            this.left.preOrder();
        }
        // 递归向右子树前序遍历
        if (this.right != null){
            this.right.preOrder();
        }
    }
    // 编写中序遍历
    public void infixOrder(){
        // 递归向左子树中序遍历
        if (this.left != null){
            this.left.infixOrder();
        }
        System.out.println(this);
        // 嘀咕向右子树中序遍历
        if (this.right != null){
            this.right.infixOrder();
        }
    }
    // 编写后序遍历
    public void postOrder(){
        // 左子树后序遍历
        if (this.left != null){
            this.left.postOrder();
        }
        // 右子树后序遍历
        if (this.right != null){
            this.right.postOrder();
        }
        System.out.println(this);
    }
}

posted @ 2021-08-09 15:26  笔锋  阅读(49)  评论(0)    收藏  举报