当前位置:编程学习 > JAVA >>

java版 二叉树 所有递归和非递归遍历算法

[java] 
通过数组构造二叉树,所有遍历算法以及求二叉树深度的递归算法 
[java] 
import java.util.LinkedList; 
 
 
public class BinaryTree { 
     
    private Node<Integer> root; 
     
    private int size;  www.zzzyk.com
     
    public BinaryTree() { 
        root = new Node<Integer>(); 
    }  
         
    public BinaryTree(int[] values) { 
        System.out.print("新建binaryTree:"); 
        for (int i : values) { 
            System.out.print(i); 
        } 
        System.out.println(); 
        boolean isLeft = true; 
        int len = values.length; 
        if (len == 0) 
            return ; 
        LinkedList<Node<Integer>> queue = new LinkedList<Node<Integer>>(); 
        root = new Node<Integer>(values[0]); 
        queue.addLast(root); 
        Node parent = null; 
        Node current = null; 
        for (int i=1; i<len; i++) { 
            current = new Node<Integer>(values[i]); 
            queue.addLast(current); 
            if (isLeft) 
                parent = queue.getFirst(); 
            else 
                parent = queue.removeFirst(); 
            if (isLeft) { 
                parent.setLeftChild(current); 
                isLeft = false; 
            }else { 
                parent.setRightChild(current); 
                isLeft = true; 
            } 
        } 
    }  
     
    public void inorder() { 
        System.out.print("binaryTree递归中序遍历:"); 
        inorderTraverseRecursion(root); 
        System.out.println(); 
    } 
     
    public void layerorder() { 
        System.out.print("binaryTree层次遍历:"); 
        LinkedList<Node<Integer>> queue = new LinkedList<Node<Integer>>(); 
        queue.addLast(root); 
        Node<Integer> current = null; 
        while(!queue.isEmpty()) { 
            current = queue.removeFirst(); 
            if (current.getLeftChild() != null) 
                queue.addLast(current.getLeftChild()); 
            if (current.getRightChild() != null) 
                queue.addLast(current.getRightChild()); 
            System.out.print(current.getValue()); 
        } 
        System.out.println(); 
    } 
     
    public int getLength() { 
        return getLengthRecursion(root); 
    } 
     
    private int getLengthRecursion(Node<Integer> node){ 
        if (node == null) 
            return 0; 
        int llen = getLengthRecursion(node.getLeftChild()); 
        int rlen = getLengthRecursion(node.getRightChild()); 
        int maxlen = Math.max(llen, rlen); 
        return maxlen + 1; 
    } 
    public void preorder() { 
        System.out.print("binaryTree递归先序遍历:"); 
        preorderTraverseRecursion(root); 
        System.out.println(); 
    } 
     
    private void inorderTraverseRecursion(Node<Integer> node) { 
        // TODO Auto-generated method stub 
        if (node.getLeftChild() != null) 
            inorderTraverseRecursion(node.getLeftChild()); 
        System.out.print(node.getValue()); 
        if (node.getRightChild() != null) 
            inorderTraverseRecursion(node.getRightChild()); 
    } 
     
 
    private void preorderTraverseRecursion(Node<Integer> node){ 
        System.out.print(node.getValue()); 
        if (node.getLeftChild() != null) 
            preorderTraverseRecursion (node.getLeftChild()); 
  
补充:软件开发 , Java ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,