private Node root;
private class Node{
E data;
Node parent;
Node left;
Node right;
public Node(E e) {
data = e;
}
//对节点进行比较,并存方法
public boolean addChild(E e) {
int val = e.compareTo(data); //0:相等 正数:e大 负数:e小
//e与当前数据比较,如果相等,返回false,添加失败
if(val == 0) {
return false;
}
//如果e比当前数据小,则添加到左则
if(val < 0) {
if(left == null) {
left = new Node(e); //左侧添加新节点
left.parent = this;
return true;
}else {
//向左递归添加节点
return left.addChild(e);
}
}else {
//如果e比当前数据大,则添加到右则
if(right == null) {
right = new Node(e);
right.parent = this;
return true;
}else {
return right.addChild(e);
}
}
}
//遍历输出
public String toString() {
//中序遍历:顺序为:左节点+中节点+右节点
StringBuilder buf = new StringBuilder();
if(left != null) {
buf.append(left.toString());//该方法会进行递归,因为有toString
}
buf.append(data).append(",");
if(right!=null) {
buf.append(right.toString()); //该方法也会进行递归
}
return buf.toString();
}
}
//添加节点,当有节点时,进行addChild方法比较大小
public boolean add(E e) {
if(root==null) {
root = new Node(e);
return true;
}
return root.addChild(e);
}
//遍历输出算法
public String toString() {
//二叉树有三中输出顺序:
//1.先序输出:中节点、左节点、右节点
//2.中序输出:左节点、中节点、右节点 输出的是排序结果 (由小到大输出)
//3.后序输出:左节点、右节点、中节点
if(root == null){
return "[]";
}
return "["+root+"]";
}
手写二叉树
最新推荐文章于 2023-02-09 08:56:03 发布