首页 > 代码库 > 【DataStructure】Implemantation of Binary Tree
【DataStructure】Implemantation of Binary Tree
Statements: This blog was written by me, but most of content is quoted from book【Data Structure with Java Hubbard】
Here is a class for binary trees that directly implements the recursive definition. By extending the AbstractCollectionclass, it remains consistent with the Java Collections Framework.
【Implementation】
package com.albertshao.ds.tree; // Data Structures with Java, Second Edition // by John R. Hubbard // Copyright 2007 by McGraw-Hill import java.util.*; public class BinaryTree<E> extends AbstractCollection { protected E root; protected BinaryTree<E> left, right, parent; protected int size; public BinaryTree() { } public BinaryTree(E root) { this.root = root; size = 1; } public BinaryTree(E root, BinaryTree<E> left, BinaryTree<E> right) { this(root); if (left != null) { this.left = left; left.parent = this; size += left.size(); } if (right != null) { this.right = right; right.parent = this; size += right.size(); } } public boolean equals(Object object) { if (object == this) { return true; } else if (!(object instanceof BinaryTree)) { return false; } BinaryTree that = (BinaryTree)object; return that.root.equals(this.root) && that.left.equals(this.left) && that.right.equals(this.right) && that.parent.equals(this.parent) && that.size == this.size; } public int hashCode() { return root.hashCode() + left.hashCode() + right.hashCode() + size; } public int size() { return size; } public Iterator iterator() { return new java.util.Iterator() { // anonymous inner class private boolean rootDone; private Iterator lIt, rIt; // child iterators public boolean hasNext() { return !rootDone || lIt != null && lIt.hasNext() || rIt != null && rIt.hasNext(); } public Object next() { if (rootDone) { if (lIt != null && lIt.hasNext()) { return lIt.next(); } if (rIt != null && rIt.hasNext()) { return rIt.next(); } return null; } if (left != null) { lIt = left.iterator(); } if (right != null) { rIt = right.iterator(); } rootDone = true; return root; } public void remove() { throw new UnsupportedOperationException(); } }; } }
【Test】
package com.albertshao.ds.tree; // Data Structures with Java, Second Edition // by John R. Hubbard // Copyright 2007 by McGraw-Hill public class TestBinaryTree { static public void main(String[] args) { BinaryTree<String> e = new BinaryTree<String>("E"); BinaryTree<String> g = new BinaryTree<String>("G"); BinaryTree<String> h = new BinaryTree<String>("H"); BinaryTree<String> i = new BinaryTree<String>("I"); BinaryTree<String> d = new BinaryTree<String>("D", null, g); BinaryTree<String> f = new BinaryTree<String>("F", h, i); BinaryTree<String> b = new BinaryTree<String>("B", d, e); BinaryTree<String> c = new BinaryTree<String>("C", f, null); BinaryTree<String> tree = new BinaryTree<String>("A", b, c); System.out.printf("tree: %s", tree); } }
【Result】tree: [A, B, D, G, E, C, F, H, I]
The example shows two views of the same tree. The larger view shows all the details, representing each
object reference with an arrow.
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。