数据结构和算法(19)之二叉树及其遍历

学习数据结构和算法的日常Demo

树的基本介绍

从数据存储方式谈起

在这里插入图片描述
在这里插入图片描述

树的常用术语

在这里插入图片描述
在这里插入图片描述

二叉树基本介绍

在这里插入图片描述

二叉树的遍历

  • 前序遍历:先输出父节点,再遍历左子树和右子树
  • 中序遍历:先遍历左子树,在输出父节点,在遍历右子树
  • 后序遍历:先遍历左子树,再遍历右子树,最后输出父节点
  • 小结:看输出父节点的顺序,就确定是前序,中序还是后序
遍历步骤

在这里插入图片描述

代码实现:
public class TreeNode {
    private int value;
    private TreeNode left;
    private TreeNode right;

    public TreeNode(int value) {
        this.value = value;
    }

    @Override
    public String toString() {
        return "TreeNode{" +
                "value=" + value +
                '}';
    }

    public int getValue() {
        return value;
    }

    public void setValue(int value) {
        this.value = value;
    }

    public TreeNode getLeft() {
        return left;
    }

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

    public TreeNode getRight() {
        return right;
    }

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

    // 前序遍历
    public void preOrder() {
        // 输出父节点
        System.out.print(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.print(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.print(this + "   ");
    }
  }

public class BinaryTree {
    private TreeNode root;

    public TreeNode getRoot() {
        return root;
    }

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

    // 前序遍历
    public void preOrder() {
        if (root != null) {
            root.preOrder();
        } else {
            System.out.println("二叉树为空!");
        }
    }

    public void infixOrder() {
        if (root != null) {
            root.infixOrder();
        } else {
            System.out.println("二叉树为空!");
        }
    }

    public void postOrder() {
        if (root != null) {
            root.postOrder();
        } else {
            System.out.println("二叉树为空!");
        }
    }
 }


public class BinaryTreeDemo {
    public static void main(String args[]) {
        BinaryTree tree = new BinaryTree();
        TreeNode root = new TreeNode(33);
        TreeNode node1 = new TreeNode(18);
        TreeNode node2 = new TreeNode(63);
        TreeNode node3 = new TreeNode(77);
        TreeNode node4 = new TreeNode(51);
        TreeNode node5 = new TreeNode(9);
        TreeNode node6 = new TreeNode(24);
        TreeNode node7 = new TreeNode(100);
        // 构建树
        root.setLeft(node1);
        root.setRight(node2);
        node1.setLeft(node5);
        node1.setRight(node6);
        node2.setLeft(node4);
        node2.setRight(node3);
        node3.setRight(node7);
        // 创建根节点
        tree.setRoot(root);

        /*
                 33
           18           63
         9   24       51    77
                               100
         */
        System.out.println("前序遍历:");
        tree.preOrder();
        System.out.println();
        System.out.println("中序遍历:");
        tree.infixOrder();
        System.out.println();
        System.out.println("后序遍历:");
        tree.postOrder();
	}
}

前序遍历:
TreeNode{value=33} TreeNode{value=18} TreeNode{value=9} TreeNode{value=24} TreeNode{value=63} TreeNode{value=51} TreeNode{value=77} TreeNode{value=100}
中序遍历:
TreeNode{value=9} TreeNode{value=18} TreeNode{value=24} TreeNode{value=33} TreeNode{value=51} TreeNode{value=63} TreeNode{value=77} TreeNode{value=100}
后序遍历:
TreeNode{value=9} TreeNode{value=24} TreeNode{value=18} TreeNode{value=51} TreeNode{value=100} TreeNode{value=77} TreeNode{value=63} TreeNode{value=33}

GitHub:数据结构和算法源代码

发布了67 篇原创文章 · 获赞 21 · 访问量 2687

猜你喜欢

转载自blog.csdn.net/qq_44779506/article/details/105105379