二叉树创建-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);
    }
}
目录
相关文章
|
8月前
|
存储 算法 Java
Java中,树与图的算法涉及二叉树的前序、中序、后序遍历以及DFS和BFS搜索。
【6月更文挑战第21天】Java中,树与图的算法涉及二叉树的前序、中序、后序遍历以及DFS和BFS搜索。二叉树遍历通过访问根、左、右子节点实现。DFS采用递归遍历图的节点,而BFS利用队列按层次访问。以下是简化的代码片段:[Java代码略]
60 4
|
4月前
|
Java
【用Java学习数据结构系列】震惊,二叉树原来是要这么学习的(二)
【用Java学习数据结构系列】震惊,二叉树原来是要这么学习的(二)
42 1
|
4月前
|
算法 Java C语言
【用Java学习数据结构系列】震惊,二叉树原来是要这么学习的(一)
【用Java学习数据结构系列】震惊,二叉树原来是要这么学习的(一)
37 1
|
3月前
|
算法 Java
JAVA 二叉树面试题
JAVA 二叉树面试题
35 0
|
6月前
|
存储 算法 Java
LeetCode经典算法题:二叉树遍历(递归遍历+迭代遍历+层序遍历)以及线索二叉树java详解
LeetCode经典算法题:二叉树遍历(递归遍历+迭代遍历+层序遍历)以及线索二叉树java详解
96 0
|
8月前
|
算法 Java 索引
【算法】重建二叉树并进行后序遍历的Java实现
【算法】重建二叉树并进行后序遍历的Java实现
68 5
|
8月前
|
算法 搜索推荐 Java
二叉树的基本概念、常见操作以及如何使用Java代码
二叉树的基本概念、常见操作以及如何使用Java代码
121 1
|
8月前
|
Java
二叉树简单遍历、查找、删除(java)
二叉树简单遍历、查找、删除(java)
|
8月前
|
存储 Java
顺序存储二叉树(java)
顺序存储二叉树(java)
|
8月前
|
Java
二叉树线索化(java)
二叉树线索化(java)