二叉树创建-Java实现

简介: 二叉树

二叉树,特殊的图,非线性结构,递归的

总览

package com.collection;

/**
 * @author WangYH
 * @version 2021.1.3
 * @date 2023/4/30 10:39
 */

public class BTreeNode {
   
    public static class TreeNode<E>{
   
        public E data;
        public TreeNode<E> left,right;

        public TreeNode(E data) {
   
            this.data = data;
            this.left = this.right = null;
        }
    }
}


测试

package com.collection;

/**
 * @author WangYH
 * @version 2021.1.3
 * @date 2023/4/29 21:42
 */

public class Main {
   
    public static void main(String[] args) {
   
        BTreeNode.TreeNode<Character> a = new BTreeNode.TreeNode<>('A');
        BTreeNode.TreeNode<Character> b = new BTreeNode.TreeNode<>('B');
        BTreeNode.TreeNode<Character> c = new BTreeNode.TreeNode<>('C');
        BTreeNode.TreeNode<Character> d = new BTreeNode.TreeNode<>('D');
        BTreeNode.TreeNode<Character> e = new BTreeNode.TreeNode<>('E');
        a.left = b;
        a.right = c;
        b.left = d;
        b.right = e;

        System.out.println(a.left.left.data);
    }
}


二叉树遍历

前序遍历

  //前序遍历

    public static void preOrder(TreeNode<Character> root){
   
        if (root != null) {
   
            System.out.print(root.data + " ");
            preOrder(root.left);
            preOrder(root.right);
        }
    }


中序遍历

//中序遍历

    public static void inOrder(TreeNode<Character> root) {
   
        if (root != null) {
   
            inOrder(root.left);
            System.out.print(root.data + " ");
            inOrder(root.right);
        }
    }


后序遍历

 //后序遍历

    public static void postOrder(TreeNode<Character> root) {
   
        if (root != null) {
   
            postOrder(root.left);
            postOrder(root.right);
            System.out.print(root.data + " ");
        }
    }


层序遍历,使用队列,稍微复杂一点

//层序遍历

    public static void levelOrder(TreeNode<Character> root) {
   
        if (root == null) {
   
            return;
        }
        Queue<TreeNode<Character>> queue = new LinkedList<>();
        queue.add(root);
        while (!queue.isEmpty()) {
   
            TreeNode<Character> node = queue.poll();
            System.out.print(node.data + " ");
            //左右严格按照顺序
            if (node.left != null) {
   
                queue.add(node.left);
            }
            if (node.right != null) {
   
                queue.add(node.right);
            }
        }
        System.out.println();
    }


总览

package com.collection;

import java.util.LinkedList;
import java.util.Queue;

/**
 * @author WangYH
 * @version 2021.1.3
 * @date 2023/4/30 10:39
 */

public class BTreeNode {
   
    public static class TreeNode<E>{
   
        public E data;
        public TreeNode<E> left,right;

        public TreeNode(E data) {
   
            this.data = data;
            this.left = this.right = null;
        }
    }

    //前序遍历

    public static void preOrder(TreeNode<Character> root){
   
        if (root != null) {
   
            System.out.print(root.data + " ");
            preOrder(root.left);
            preOrder(root.right);
        }
    }

    //中序遍历

    public static void inOrder(TreeNode<Character> root) {
   
        if (root != null) {
   
            inOrder(root.left);
            System.out.print(root.data + " ");
            inOrder(root.right);
        }
    }

    //后序遍历

    public static void postOrder(TreeNode<Character> root) {
   
        if (root != null) {
   
            postOrder(root.left);
            postOrder(root.right);
            System.out.print(root.data + " ");
        }
    }

    //层序遍历

    public static void levelOrder(TreeNode<Character> root) {
   
        if (root == null) {
   
            return;
        }
        Queue<TreeNode<Character>> queue = new LinkedList<>();
        queue.add(root);
        while (!queue.isEmpty()) {
   
            TreeNode<Character> node = queue.poll();
            System.out.print(node.data + " ");
            //左右严格按照顺序
            if (node.left != null) {
   
                queue.add(node.left);
            }
            if (node.right != null) {
   
                queue.add(node.right);
            }
        }
        System.out.println();
    }

}


测试

package com.collection;

/**
 * @author WangYH
 * @version 2021.1.3
 * @date 2023/4/29 21:42
 */

public class Main {
   
    public static void main(String[] args) {
   
        BTreeNode.TreeNode<Character> a = new BTreeNode.TreeNode<>('A');
        BTreeNode.TreeNode<Character> b = new BTreeNode.TreeNode<>('B');
        BTreeNode.TreeNode<Character> c = new BTreeNode.TreeNode<>('C');
        BTreeNode.TreeNode<Character> d = new BTreeNode.TreeNode<>('D');
        BTreeNode.TreeNode<Character> e = new BTreeNode.TreeNode<>('E');
        BTreeNode.TreeNode<Character> f = new BTreeNode.TreeNode<>('F');
        a.left = b;
        a.right = c;
         b.left = d;
        b.right = e;
        c.right = f;

        System.out.println(a.left.left.data);

        BTreeNode.preOrder(a);
        System.out.println();
        BTreeNode.inOrder(a);
        System.out.println();
        BTreeNode.postOrder(a);
        System.out.println();
        BTreeNode.levelOrder(a);
    }
}
目录
相关文章
|
2天前
|
算法 Java
算法:Java计算二叉树从根节点到叶子结点的最大路径和
算法:Java计算二叉树从根节点到叶子结点的最大路径和
|
2天前
|
Java
Java二叉树超详解(常用方法介绍)(2)
Java二叉树超详解(常用方法介绍)(2)
|
2天前
|
存储 Java
JAVA 二叉树超详解(1)
JAVA 二叉树超详解(1)
|
2天前
|
Java
2415. 反转二叉树的奇数层 --力扣 --JAVA
给你一棵 完美 二叉树的根节点 root ,请你反转这棵树中每个 奇数 层的节点值。 例如,假设第 3 层的节点值是 [2,1,3,4,7,11,29,18] ,那么反转后它应该变成 [18,29,11,7,4,3,1,2] 。 反转后,返回树的根节点。 完美 二叉树需满足:二叉树的所有父节点都有两个子节点,且所有叶子节点都在同一层。 节点的 层数 等于该节点到根节点之间的边数。
28 0
|
2天前
|
Java
145. 二叉树的后序遍历 --力扣 --JAVA
给你一棵二叉树的根节点 root ,返回其节点值的 后序遍历 。
22 0
|
2天前
|
Java
124. 二叉树中的最大路径和 --力扣 --JAVA
二叉树中的 路径 被定义为一条节点序列,序列中每对相邻节点之间都存在一条边。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点,且不一定经过根节点。 路径和 是路径中各节点值的总和。 给你一个二叉树的根节点 root ,返回其 最大路径和 。
26 1
|
2天前
|
存储 Java
ZigZagging on a Tree二叉树蛇形层次遍历(Java语言)
ZigZagging on a Tree二叉树蛇形层次遍历(Java语言)
7 1
|
2天前
|
Java
Tree Traversals Again(Java语言)(先序和中序创建二叉树)(遍历树)
Tree Traversals Again(Java语言)(先序和中序创建二叉树)(遍历树)
11 4
|
2天前
|
Java Go C++
Golang每日一练(leetDay0085) 2的幂、数字 1 的个数
Golang每日一练(leetDay0085) 2的幂、数字 1 的个数
27 0
Golang每日一练(leetDay0085) 2的幂、数字 1 的个数
|
2天前
|
Java C++ Python
Rust每日一练(Leetday0013) 解数独、外观数列、组合总和
Rust每日一练(Leetday0013) 解数独、外观数列、组合总和
37 0
Rust每日一练(Leetday0013) 解数独、外观数列、组合总和