数据结构与算法之二叉树的简单实现

1.二叉树节点类

package cn.ljj.data;

public class Node {
  //节点数据项
  public long data;
  //左子节点
  public Node leftChildren;
  //右子节点
  public Node rightChildren;
  //构造方法
  public Node(long data){
	  this.data = data;
  }
}

2.二叉树的基本操作类

package cn.ljj.data;

public class Tree {
	// 根节点
	public Node root;

	/**
	 * 插入节点
	 * 
	 * @param value
	 */
	public void insert(long value) {
		// 封装节点Node
		Node node = new Node(value);
		//当前接节点
		Node current = root;
		//父节点
		Node parent = null;
		if (root == null) {
			root = node;
			return;
		}
		while (true) {
			parent = current;
			if (current.data >= value) {
				current = current.leftChildren;
				if (current == null) {
					parent.leftChildren = node;
					return;
				}

			} else {
				current = current.rightChildren;
				if (current == null) {
					parent.rightChildren = node;
					return;
				}
			}
		}

	}

	/**
	 * 查找节点 param value
	 */
	public Node find(long value) {
		Node currentNode = root;
		while(currentNode!=null){
			if(value==currentNode.data){
				return currentNode;
			}else if(value>currentNode.data){
				currentNode  = currentNode.rightChildren;
			}else{
				currentNode  = currentNode.leftChildren;
			}
		}
        return currentNode;
	}

	/**
	 * 先序遍历
	 */
	public void preOrder(Node node){
		if(node!=null){
			System.out.println(node.data);
			preOrder(node.leftChildren);
			preOrder(node.rightChildren);
		}
		
	}
	/**
	 * 中序遍历
	 * @param args
	 */
	public void inOrder(Node node){
		if(node!=null){
			inOrder(node.leftChildren);
			System.out.println(node.data);
			inOrder(node.rightChildren);
		}
	}
	/**
	 * 后序遍历
	 * @param args
	 */
	public void afterOrder(Node node){
		if(node!=null){
			afterOrder(node.leftChildren);
			afterOrder(node.rightChildren);
			System.out.println(node.data);
		}
	}
	
}


猜你喜欢

转载自blog.csdn.net/ljj1338/article/details/80376802