手写二叉树

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+"]";
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值