二叉树的遍历

1.二叉树模型

二叉树的遍历_第1张图片

2.先序遍历

2.1.概念

先序遍历也叫做先根遍历、前序遍历,可记做根左右(二叉树父结点向下先左后右)
首先访问根结点然后遍历左子树,最后遍历右子树。在遍历左、右子树时,仍然先访问根结点,然后遍历左子树,最后遍历右子树,如果二叉树为空则返回。
A,B,D,H,E,C,F,G

2.2.代码实现(JAVA版)

二叉树节点类TreeNode

package cn.tedu.function;

/**
 * @description: 二叉树节点
 * @author: zfh
 * @version: 1.0
 * @date: 2021/11/18 16:48:22
 **/
public class TreeNode {
    private Object data;
    private TreeNode left;
    private TreeNode right;

    public Object getData() {
        return data;
    }

    public void setData(Object data) {
        this.data = data;
    }

    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 TreeNode(Object data) {
        this.data = data;
    }

    public TreeNode(Object data, TreeNode left, TreeNode right) {
        this.data = data;
        this.left = left;
        this.right = right;
    }

}

二叉树遍历BinaryTreeTraverse

/**
 * @description:
 * @author: zfh
 * @version: 1.0
 * @date: 2021/11/18 16:50:31
 **/
public class BinaryTreeTraverse {
    public static void main(String[] args) {
        //1.构建节点
        TreeNode a = new TreeNode("A");
        TreeNode b = new TreeNode("B");
        TreeNode c = new TreeNode("C");
        TreeNode d = new TreeNode("D");
        TreeNode e = new TreeNode("E");
        TreeNode f = new TreeNode("F");
        TreeNode g = new TreeNode("G");
        TreeNode h = new TreeNode("H");

        //2.添加关系
        a.setLeft(b);
        a.setRight(c);

        b.setLeft(d);
        b.setRight(e);

        c.setLeft(f);
        c.setRight(g);

        d.setLeft(h);


        //3.调用遍历方法
        preTraverse(a);
    }

    /**
     * 前序遍历
     * @param curNode 当前节点
     */
    public static void preTraverse(TreeNode curNode){
        if(curNode != null){
            System.out.println(curNode.getData());
            preTraverse(curNode.getLeft());
            preTraverse(curNode.getRight());
        }

    }

}

二叉树的遍历_第2张图片

3.中序遍历

3.1.概念

中序遍历(LDR)是二叉树遍历的一种,也叫做中根遍历。在二叉树中,中序遍历首先遍历左子树,然后访问根节点,最后遍历右子树,可记做左根右(二叉树先左次根后右)
中序遍历首先遍历左子树,然后访问根结点,最后遍历右子树。若二叉树为空则结束返回,否则:
(1)中序遍历左子树
(2)访问根结点
(3)中序遍历右子树
H -> D -> B -> E -> A -> F -> C -> G

3.2.中序遍历代码实现

 /**
  * 中序遍历
  * H -> D -> B -> E -> A -> F -> C -> G
  * @param curNode 当前节点
  */
 public static void midTraverse(TreeNode curNode){
     if(curNode != null){
         midTraverse(curNode.getLeft());
         System.out.println(curNode.getData());
         midTraverse(curNode.getRight());
     }
 }

二叉树的遍历_第3张图片

4.后序遍历

4.1.概念

后序遍历(LRD也叫做后根遍历,可记做左右根。在二叉树中,先左后右再根,即首先遍历左子树,然后遍历右子树,最后访问根结点。
后序遍历首先遍历左子树,然后遍历右子树,最后访问根结点,在遍历左、右子树时,仍然先遍历左子树,然后遍历右子树,最后遍历根结点。即:
若二叉树为空则结束返回,
否则:
(1)后序遍历左子树
(2)后序遍历右子树
(3)访问根结点

4.2.后序遍历代码实现

 /**
  * 后序遍历
  * H -> D -> E -> B -> F -> G -> C -> A
  * @param curNode 当前节点
  */
 public static void nextTraverse(TreeNode curNode){
     if(curNode != null){
         nextTraverse(curNode.getLeft());
         nextTraverse(curNode.getRight());
         System.out.println(curNode.getData());
     }
 }

二叉树的遍历_第4张图片

你可能感兴趣的:(Java,b树)