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()){