@Test public void testIsDescendantOf() { String messageTrue = "The specified tree node was expected to be the descendant of the current tree node, " + "but actually was not"; assertTrue(messageTrue, node6.isDescendantOf(root)); assertTrue(messageTrue, node3.isDescendantOf(root)); assertTrue(messageTrue, node5.isDescendantOf(node2)); assertTrue(messageTrue, node10.isDescendantOf(node9)); String messageFalse = "The specified tree node was not expected to be the descendant of the current tree node, " + "but actually was"; assertFalse(messageFalse, node3.isDescendantOf(node6)); assertFalse(messageFalse, node2.isDescendantOf(null)); assertFalse(messageFalse, root.isDescendantOf(node3)); assertFalse(messageFalse, node2.isDescendantOf(node1)); assertFalse(messageFalse, node10.isDescendantOf(node10)); }
public boolean isDescendantOf(TreeNode<T> node) { if (node == null || this.isRoot() || node.isLeaf() || this.equals(node)) { return false; } TreeNode<T> mNode = this; do { mNode = mNode.parent(); if (node.equals(mNode)) { return true; } } while (!mNode.isRoot()); return false; }
TreeNode implements Iterable<TreeNode<T>>, Serializable, Cloneable { public boolean isDescendantOf(TreeNode<T> node) { if (node == null || this.isRoot() || node.isLeaf() || this.equals(node)) { return false; } TreeNode<T> mNode = this; do { mNode = mNode.parent(); if (node.equals(mNode)) { return true; } } while (!mNode.isRoot()); return false; } }
TreeNode implements Iterable<TreeNode<T>>, Serializable, Cloneable { public boolean isDescendantOf(TreeNode<T> node) { if (node == null || this.isRoot() || node.isLeaf() || this.equals(node)) { return false; } TreeNode<T> mNode = this; do { mNode = mNode.parent(); if (node.equals(mNode)) { return true; } } while (!mNode.isRoot()); return false; } TreeNode(T data);  TreeNode(); }
TreeNode implements Iterable<TreeNode<T>>, Serializable, Cloneable { public boolean isDescendantOf(TreeNode<T> node) { if (node == null || this.isRoot() || node.isLeaf() || this.equals(node)) { return false; } TreeNode<T> mNode = this; do { mNode = mNode.parent(); if (node.equals(mNode)) { return true; } } while (!mNode.isRoot()); return false; } TreeNode(T data);  TreeNode(); abstract Collection<? extends TreeNode<T>> subtrees(); abstract boolean add(TreeNode<T> subtree); abstract boolean dropSubtree(TreeNode<T> subtree); abstract void clear(); abstract TreeNodeIterator iterator(); T data(); void setData(T data); boolean isRoot(); TreeNode<T> root(); TreeNode<T> parent(); boolean isLeaf(); @SuppressWarnings("unchecked") TreeNode<T> find(final T data); Collection<? extends TreeNode<T>> findAll(final T data); boolean hasSubtree(TreeNode<T> subtree); boolean contains(TreeNode<T> node); boolean containsAll(Collection<TreeNode<T>> nodes); boolean remove(TreeNode<T> node); boolean removeAll(Collection<TreeNode<T>> nodes); void traversePreOrder(TraversalAction<TreeNode<T>> action); void traversePostOrder(TraversalAction<TreeNode<T>> action); Collection<TreeNode<T>> preOrdered(); Collection<TreeNode<T>> postOrdered(); Collection<? extends TreeNode<T>> path(TreeNode<T> descendant); TreeNode<T> commonAncestor(TreeNode<T> node); boolean isSiblingOf(TreeNode<T> node); boolean isAncestorOf(TreeNode<T> node); boolean isDescendantOf(TreeNode<T> node); long size(); int height(); int level(); @SuppressWarnings("unchecked") @Override TreeNode<T> clone(); @SuppressWarnings("unchecked") @Override boolean equals(Object obj); @Override int hashCode(); @Override String toString(); }
TreeNode implements Iterable<TreeNode<T>>, Serializable, Cloneable { public boolean isDescendantOf(TreeNode<T> node) { if (node == null || this.isRoot() || node.isLeaf() || this.equals(node)) { return false; } TreeNode<T> mNode = this; do { mNode = mNode.parent(); if (node.equals(mNode)) { return true; } } while (!mNode.isRoot()); return false; } TreeNode(T data);  TreeNode(); abstract Collection<? extends TreeNode<T>> subtrees(); abstract boolean add(TreeNode<T> subtree); abstract boolean dropSubtree(TreeNode<T> subtree); abstract void clear(); abstract TreeNodeIterator iterator(); T data(); void setData(T data); boolean isRoot(); TreeNode<T> root(); TreeNode<T> parent(); boolean isLeaf(); @SuppressWarnings("unchecked") TreeNode<T> find(final T data); Collection<? extends TreeNode<T>> findAll(final T data); boolean hasSubtree(TreeNode<T> subtree); boolean contains(TreeNode<T> node); boolean containsAll(Collection<TreeNode<T>> nodes); boolean remove(TreeNode<T> node); boolean removeAll(Collection<TreeNode<T>> nodes); void traversePreOrder(TraversalAction<TreeNode<T>> action); void traversePostOrder(TraversalAction<TreeNode<T>> action); Collection<TreeNode<T>> preOrdered(); Collection<TreeNode<T>> postOrdered(); Collection<? extends TreeNode<T>> path(TreeNode<T> descendant); TreeNode<T> commonAncestor(TreeNode<T> node); boolean isSiblingOf(TreeNode<T> node); boolean isAncestorOf(TreeNode<T> node); boolean isDescendantOf(TreeNode<T> node); long size(); int height(); int level(); @SuppressWarnings("unchecked") @Override TreeNode<T> clone(); @SuppressWarnings("unchecked") @Override boolean equals(Object obj); @Override int hashCode(); @Override String toString();  }