树1

树节点类:

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

待续...



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值