Java实现二叉树,方便刷leetcode

为了在LeetCode上方便地刷树和DFS题目,本文提供了Java实现的二叉树结构,包括层序和递归创建二叉树的方法,有助于提高调试效率。
摘要由CSDN通过智能技术生成

Java实现二叉树

最近在leetcode上刷树和dfs的题,简单题中经常遇到二叉树这种数据结构,因为实在太菜,肉眼debug太困难,为了找错方便我在本地建立了与leetcode上相同的二叉树结构,提供了层序建立二叉树和递归建立二叉树两种方法,希望能对刷leetcode的新手们有帮助!

下面直接附上代码:

TreeNode

一个基本的二叉树结点。

package Tree;

/***
 * 二叉树结点
 * @date 2020/12/18
 * @author xuning
 * @param <E>
 */
public class TreeNode<E> {
   
    E val;
    public TreeNode left = null;
    public TreeNode right = null;
    public TreeNode(){
   };
    TreeNode(E x) {
    val = x; }

    @Override
    public String toString() {
   
        return "TreeNode{" +
                "val=" + val +
                ", left=" + left +
                ", right=" + right +
                '}';
    }
}

BinaryTree

package Tree;


import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;

/**
 * 基本二叉树结构
 * 当使用数组传入数据时,默认递归建树
 * 也可以建立空树,选择递归或者层序建立二叉树
 * @param <E>
 * @date 2020/12/18
 * @author xuning
 */
public class BinaryTree<E> {
   
    /**
     * 根结点
     */
    private TreeNode<E> root = null;

    /**
     * 建立二叉树时,用于缓存数据的栈空间
     */
    private LinkedList<E> stack = null;

    /**
     * 保存二叉树数据的列表
     */
    private List<E> elements = new ArrayList<>();

    /**
     * 无参构造方法
     */
    public BinaryTree(){
   
    }

    /**
     * 有参构造方法,默认左递归建立二叉树,
     * 因此需要传入左递归顺序的数据
     * @param data 左递归顺序的数组数据
     */
    public BinaryTree(E[] data){
   
        this.stack = new LinkedList<E>(Arrays.asList(data));
        CreateBinaryTree();
    }

    /**
     * 获取根结点
     * @return root 返回根结点
     */
    public TreeNode<E> getRoot(){
   
        return this.root;
    }

    /**
     * 设置根结点
     * @param root 根结点
     */
    public void setRoot(TreeNode<E> root){
   
        this.root = root;
    }

    /**
     * 左递归建立二叉树
     * @return
     */
    private void CreateBinaryTree(){
   
        if(!stack.isEmpty()){
   
            this.root = recursiveCreateBinaryTree(root, stack);
        }else{
   
            this.root = null;
        }
    }

    /***
     * 左递归建立二叉树,需要传入左递归顺序的二叉树数据
     * @param data
     */
    public void recursiveCreateBinaryTree(E[] data){
   
        this.stack = new LinkedList<E>(Arrays.asList(data));
        if(!stack.isEmpty()){
   
        
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值