java实现二叉树,以及递归实现前序,中序,后序遍历,非递归实现前序

1.如有不正之处,敬请指正!

import java.util.LinkedList;
import java.util.Queue;
import java.util.Stack;

public class BST<E extends Comparable<E>> {
	
	private class Node{
		E e;
		public Node left;
		public Node right;
		
		public Node(E e) {
			this.e = e;
		}

	
	}
	
	private Node root;
	private int size = 0;
	
	public int getSize() {
		return size;
	}
	
	public boolean isEmpty() {
		return size == 0;
	}
	
	public void add(E e) {                        //先二叉树添加元素
		root=add(root,e);
	}

	private Node add(Node node, E e) {
		if (node == null) {
			node = new Node(e);
			size++;
			return node;
		}
	  if (e.compareTo(node.e)>0) {
		  node.right = add(node.right, e);
	}else if (e.compareTo(node.e)<0) {
		node.left = add(node.left, e);
	}
	  return node;		
	}
	
	
	//
	
	public boolean contain(E e) {                       //查询二叉树是否包含某一元素
	return contain(root,e);
	
}
	
	private boolean contain(Node node, E e) {

		 if (node == null) {
				return false;
		 }
		 if (node.e.compareTo(e) == 0) {
			return true;
		}else if (node.e.compareTo(e)>0) {
			
			return contain(node.left,e);
		}else if (node.e.compareTo(e)<0) {

			return contain(node.right,e);
		
		}else {
			return false;
		}
		
		
	}

	public void preOrder() {                        //前序遍历递归实现
		
	preOrder(root);
		
	}

	private void preOrder(Node node) {                       
		if (node == null) {
			return ;
		}
		System.out.println(node.e);
		 preOrder(node.left);
		 preOrder(node.right);
	}
	
	
	public void preOrderNR() {       //前序遍历非递归写法,用栈实现
		Stack<Node> stack = new  Stack<Node>();
		stack.push(root);
		while(!stack.isEmpty()) {
			Node  nowNode = stack.pop();
			System.out.println(nowNode.e);
			if (nowNode.right != null) {
				stack.push(nowNode.right);
			}
			if (nowNode.left != null) {
				stack.push(nowNode.left);
			}
			
		}
		
	}
	
	public void midOrder() {             //中序遍历递归实现
		midOrder(root);
	}

	private void midOrder(Node node) {
		if (node == null) {
			return ;
		}
		midOrder(node.left);
		System.out.println(node.e);
	    midOrder(node.right);
	}
	
	public void backOrder() {
	
		backOrder(root);

	}

	private void backOrder(Node node) {               //后续遍历递归实现
		
		if (node == null) {
			return;
		}
		backOrder(node.left);
		backOrder(node.right);
		System.out.println(node.e);
		
	}
	
	public void leveOrder() {	                                  //层次遍历, 广度优先搜索
		Queue<Node> queue = new LinkedList<Node>();
		queue.add(root);
		
		while(!queue.isEmpty()) {
			Node node = queue.peek();
			queue.remove();
			System.out.println(node.e);
			if (node.left != null) {
				queue.add(node.left);
			}
			if (node.right != null) {
				queue.add(node.right);
			}
			
			
		}
		
	}
	
}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值