WS 18 Aufgabe 5

a)

b)

private Node insertR(int x, Node p) {
	if (p == null)
		p = new Node(x);
	else if (x < p.data)
		p.left = insertR(x, p.left);
	else if (x > p.data)
		p.right = insertR(x, p.right);
	else
		insertR(x, p.left);
	return p
}

c)

public int contains(int x) {
	return containsR(x, root);
}
 
private int containsR(int x, Node p) {
	if (p == null)
		return 0;
	else if (x < p.data)
		return containsR(x, p.left);
	else if (x > p.data)
		return containsR(x, p.right);
	else 
		return containsR(x, p.left) + containsR(x, p.right) + 1;
}

WS 19 Aufgabe 5

a)

private boolean equalsR(Node l, Node r) {
	if (l == null || r == null)
		return l == r;
	if (l.data == r.data)
		return equalsR(l.left, r.left) && equalsR(l.right, r.right);
	
	return false;
}

b)

public List<Integer> collect(Predicate<Integer> pred) {
	List<Integer> l = new LinkedLIst<>();
	collectR(root, l, pred);
	return l;
}
 
private void collectR(Node p, List<Ineteger> l, Predicate<Integer> pred) {
	if (p != null && pred.test(p.data))
		l.add(p.data);
	if (p != null) {
		collectR(p.left, l, pred);
		collectR(p.right, l, pred);
	}
}