package com.binarytree.oop; import com.binarytree.Node; public class OOPTree implements Node { private int value; private Node left; private Node right; public OOPTree(int value) { this.value = value; left = null; right = null; } @Override public int getMaxLeafDepth() { int depth = 0; if (left != null) { depth = left.getMaxLeafDepth(); } if (right != null) { depth = Math.max(depth, right.getMaxLeafDepth()); } return 1 + depth; } @Override public void addValue(int newValue) { if (newValue < value) { if (left == null) { left = new OOPTree(newValue); } else { left.addValue(newValue); } } else if (newValue > value) { if (right == null) { right = new OOPTree(newValue); } else { right.addValue(newValue); } } } @Override public String toString() { return String.format("(%s, %s, %s)", value, left, right); } }
Может показаться, что от рекурсии мы не избавились, потому как каждый из методов (addValue, getMaxLeafDepth и toString) вызывают в своем теле те же методы. Но разница с прошлым в том, что тут вызываются одноименные методы *других объектов*, а это уже скорее делегирование чем рекурсия.