Java实现二叉树,以及先序、中序、后序遍历算法的实现

1.Node类

public class Node {
	int val;
	Node left;
	Node right;
	
	Node(int val){
		this.val=val;
	}

}

2.BinaryTree类

import java.util.ArrayList;

public class BinaryTree {
	Node root;
	public BinaryTree(){
		
	}
	
	public void setRoot(Node root) {
		this.root=root;
	}
	
	boolean contain(Node root,int x) {
		boolean res=false;
		if(root.val==x) {
			res=true;
			return res;
		}
		
		if(root.left!=null) {
			res=contain(root.left,x);
			if(res==true)
				return res;
		}
		
		if(root.right!=null) {
			res=contain(root.right,x);
			if(res==true)
				return res;
		}
		return res;
	}
	
	/**
	 * 树的先序遍历结果
	 * @return
	 */
    public ArrayList preTraversal(Node node) {
    	ArrayList list = new ArrayList();
    	if(node==null) {
    		return list;
    	}
    	list.add(node.val);
    	list.addAll(preTraversal(node.left));
    	list.addAll(preTraversal(node.right));
    	return list;
    }
    
	/**
	 * 树的中序遍历结果
	 * @return
	 */
    public ArrayList midTraversal(Node node) {
    	ArrayList list = new ArrayList();
    	if(node==null) {
    		return list;
    	}
    	list.addAll(midTraversal(node.left));
    	list.add(node.val);
    	list.addAll(midTraversal(node.right));
    	return list;
    }
	/**
	 * 树的后序遍历结果
	 * @return
	 */
    public ArrayList afterTraversal(Node node) {
    	ArrayList list = new ArrayList();
    	if(node==null) {
    		return list;
    	}
    	list.addAll(afterTraversal(node.left));
    	list.addAll(afterTraversal(node.right));
    	list.add(node.val);
    	return list;
    }
    
    

}
3.层次遍历——采用循环
    /** 
     * 层次遍历 
     * @param node 
     * @return 
     */  
    public ArrayList layerTraversal(TreeNode root) {  
            ArrayList list = new ArrayList();  
            if(root==null) {  
                return list;//此处如果直接返回null,则测试失败  
            }  
            ArrayList queueList = new ArrayList();//用于存储要遍历的节点(按照同层左先进,不同层上先进的规则)  
            queueList.add(root);  
              
            while(queueList.size()>0) {  
                TreeNode thisNode = queueList.remove(0);  
                list.add(thisNode.val);  
                if(thisNode.left!=null) {  
                    queueList.add(thisNode.left);  
                }  
                if(thisNode.right!=null) {  
                    queueList.add(thisNode.right);  
                }  
            }  
              
            return list;  
        } 



你可能感兴趣的:(数据结构与算法)