二叉树经典例文(c++及Jave)

作者在 2016-08-04 11:19:24 发布以下内容

http://cslibrary.stanford.edu/110/BinaryTrees.html


public class BinTree {
	private Node root;

	public static class Node {
		private int data;
		private Node left;
		private Node right;

		public Node(int data) {
			this.data = data;
		}
	}

	public BinTree() {
		this.root = null;
	}

	/*
	 * 原则: 一个结点如有左右子结点,则符合: 左子结点比该结点小,右子结点比该结点大。 递归加入数据。 1,如果此结点为空则直接加入(似不简单明
	 * 了,为什么不直接加入左或右子树对应的空结点呢,这是因为此构造设计树根初始是空的原因。)。
	 * 2,如果当前结点不为空,则参数与该结点值比较,参数值大的话则交给此结点的右子树,继续找直至找到满足条件的结点位置加入,反之交给该结点左子树处理,找到对应位置加入。
	 */
	public Node insertNode(Node node, int data) {

		if (node == null) {
			node = new Node(data);
		} else {
			if (node.data >= data) {

				node.left = insertNode(node.left, data);
			} else {
				node.right = insertNode(node.right, data);
			}
		}
		return node;
	}

	
	//封装insertNode(Node node, int data),便于外部调用
	public void insert(int data) {
		root = insertNode(root, data);
	}

	public void create(int a[]) {
		for (int i = 0; i < a.length; i++) {
			insert(a[i]);
		}
	}
	

/*	中序遍历,
*/	
	public void midSort(Node node) {
		if (node == null) {
			return;
		}
		midSort(node.left);
		System.out.print(node.data + ", ");
		midSort(node.right);
	}

	
	public void printTree() {// 封装midSort(Node node);便于外部调用。
		midSort(root);

	}

	public static void main(String[] args) {
		BinTree bt = new BinTree();
		int[] array = { 13, 15, 8, 2, 5, 7, 9, 10, 78, 4, 33 };
		bt.create(array);
		bt.printTree();

	}
}


数据结构及算法 | 阅读 2790 次
文章评论,共0条
游客请输入验证码
浏览239635次
最新评论