树节点类:
package org.zp.datastruct;
public class TreeNode {
public Object data;
public TreeNode leftChild;
public TreeNode rightSib;
public TreeNode () {}
public TreeNode (Object obj) {}
public TreeNode (Object obj, TreeNode leftChild, TreeNode rightSib) {}
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
public TreeNode getLeftChild() {
return leftChild;
}
public void setLeftChild(TreeNode leftChild) {
this.leftChild = leftChild;
}
public TreeNode getRightSib() {
return rightSib;
}
public void setRightSib(TreeNode rightSib) {
this.rightSib = rightSib;
}
public String toString () {
return data.toString();
}
}
测试类:
package org.zp.datastruct;
public class TreeTest {
/**
* @param args
*/
public static void main(String[] args) {
TreeNode treeNode1 = null;
TreeNode treeNode2 = new TreeNode();
// TreeNode treeNode3 = new TreeNode();
// TreeNode treeNode4 = new TreeNode();
insertFirst(treeNode2, "a");
// insertFirst(treeNode3, "b");
// insertFirst(treeNode4, "c");
print(treeNode1);
print(treeNode2);
}
// 左子结点之前插入新结点
public static void insertFirst (TreeNode curr, Object obj) {
// // 这里先new一个指向当前子树curr左子结点的结点,然后将这个新结点作为当前子树的左子结点
curr.leftChild = new TreeNode(obj, null, curr.leftChild);
}
public static void insertNext (TreeNode curr, Object obj) {
curr.rightSib = new TreeNode(obj, null, curr.rightSib);
}
public static Object removeFirst (TreeNode curr) {
if (curr.leftChild == null) {
return null;
}
Object temp = curr.leftChild.data;
curr.leftChild = curr.leftChild.rightSib;
return temp;
}
public static Object removeNext (TreeNode curr) {
if (curr.rightSib == null) {
return null;
}
Object temp = curr.rightSib.data;
curr.rightSib = curr.rightSib.rightSib;
return temp;
}
// 先根遍历查找和打印树种结点
public static TreeNode search (TreeNode ref, Object obj) {
if (ref == null) {
return null;
}
if (obj.equals(ref.data)) {
return ref;
}
TreeNode child = ref.leftChild;
while (child != null) {
ref = search(child, obj);
if (ref != null) {
return ref;
}
child = child.rightSib;
}
return child;
}
public static void print (TreeNode ref) {
if (ref == null) {
System.out.println("Empty tree");
} else {
TreeNode child = ref.leftChild;
if (child == null) {
System.out.print("Leaf:");
} else {
System.out.print("Internal:");
}
System.out.println(ref.data);
while (child != null) {
print(child);
child = child.rightSib;
}
}
}
}
结果:
Empty tree
Internal:null
Leaf:null
待续...