java数据结构--二叉树,递归遍历,非递归遍历,层次遍历

1.为什么要引入树

   线性结构的特点是插入和删除速度慢,查找速度快。

   链式结构的特点是查找速度慢,插入和删除速度快。

   

  树型结构综合了线性结构和链式结构优点,查找,删除,插入速度都快


2.二叉树的构造

  构造二叉树的节点

/**
 * 二叉树的节点
 * <p>Title: Node</p>
 * <p>Description: </p>
 * <p>Company:</p> 
 * @author	夏 杰
 * @date	2015年12月23日下午10:51:24
 * @version 1.0
 */
public  class TreeNode {
	
	//数据项
	public int data;
	//描述
	public String description;
	//左子节点
	public TreeNode leftChild;
	//右子节点
	public TreeNode rightChild;
	
	/**
	 * 构造方法
	 * <p>Title: </p>
	 * <p>Description: </p>
	 * @param data
	 */
	public TreeNode(int data,String description){
		this.data = data;
		this.description = description;
		this.leftChild=null;
		this.rightChild=null;
	}
	
	

}
3.二叉树的递归遍历递归遍历的缺点:

1.不停的压栈,效率低  

 2.容易造成栈溢出


	 * 递归前序遍历  
	 */ 
	public void preOrder(TreeNode subTree) {
		if(subTree!=null){
			vist(subTree);
			preOrder(subTree.leftChild);
			preOrder(subTree.rightChild);
		}

	}
    
    /**
     *递归中序遍历  
     */
	public void inOrder(TreeNode subTree) {
		if(subTree!=null){
			inOrder(subTree.leftChild);
			vist(subTree);
			inOrder(subTree.rightChild);
		}
		
	}

	/**
     * 递归后续遍历  
     */
	public void postOrder(TreeNode subTree) {
		if(subTree!=null){
			postOrder(subTree.leftChild);
			postOrder(subTree.rightChild);
			vist(subTree);
		}
		
	}
4.二叉树的非递归遍历
递归方法改成非递归主要依靠自己定义的一个栈来实现,而递归的实现是依靠进程中的栈(jvm中的栈)来实现的

 

5.二叉树的层次遍历

二叉树的层次遍历要借助队列来实现

第一步:先把根节点入队

第二步:再把根节点从队列取出来,在看看它有没有左孩子若有左孩子,则把左孩子入队,然后若有右孩子,则把右孩子入队(注意:要先是左孩子入队,后是右孩子入队)

第三步:重复第二步,退出重复while的条件是队列为空

/**
	 * 二叉树的层次遍历
	 * <p>Title: levelOrder</p>
	 * <p>Description: </p>
	 * @param root
	 */
	public void levelOrder(TreeNode root){
		
		//创建一个队列
		Queue<TreeNode> queue = new LinkedList<TreeNode>();
		queue.add(root);
		//层次遍历的出口是,队列为空
		while(!queue.isEmpty()){
			TreeNode vistedNode = queue.poll();
			vist(vistedNode);
			if(vistedNode.leftChild!=null){
				queue.add(vistedNode.leftChild);
			}
			if(vistedNode.rightChild!=null){
				queue.add(vistedNode.rightChild);
			}
			
		}
	}









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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值