二叉树的定义

/** class for nodes used in a binary tree */

package dataStructures;

public class BinaryTreeNode {
    // package visible data members
    Object element;
    BinaryTreeNode leftChild; // left subtree
    BinaryTreeNode rightChild; // right subtree

    // constructors
    public BinaryTreeNode() {
    }

    public BinaryTreeNode(Object theElement) {
        element = theElement;
    }

    public BinaryTreeNode(Object theElement, BinaryTreeNode theleftChild,
            BinaryTreeNode therightChild) {
        element = theElement;
        leftChild = theleftChild;
        rightChild = therightChild;
    }

    // accessor methods
    public BinaryTreeNode getLeftChild() {
        return leftChild;
    }

    public BinaryTreeNode getRightChild() {
        return rightChild;
    }

    public Object getElement() {
        return element;
    }

    // mutator methods 设值方法
    public void setLeftChild(BinaryTreeNode theLeftChild) {
        leftChild = theLeftChild;
    }

    public void setRightChild(BinaryTreeNode theRightChild) {
        rightChild = theRightChild;
    }

    public void setElement(Object theElement) {
        element = theElement;
    }

    // output method
    public String toString() {
        return element.toString();
    }
    
}

 求二叉树的节点数最多的层

public static int maxLevel(BinaryNode<Integer> t){
        if(t==null){
            return 0;
        }
        BinaryNode<Integer> endOfLevel = new BinaryNode<Integer>();
        ArrayDeque<BinaryNode<Integer>> p = new ArrayDeque<>();
        p.add(t);
        p.add(endOfLevel);
        int numOfNodes = 0;
        int maxLevel = 0;
        int maxNum = 0;
        int currentLevel = 1;
        while(true){
            BinaryNode<Integer> temp = p.poll();
            if(temp.equals(endOfLevel)){
                if(numOfNodes>maxNum){
                    maxNum = numOfNodes;
                    maxLevel = currentLevel;
                }else if(numOfNodes==0){
                    return maxLevel;
                }
                currentLevel++;
                numOfNodes = 0;
                p.add(endOfLevel);
            }else{
                numOfNodes++;
                if(temp.left!=null){
                    p.add(temp.left);
                }
                if(temp.right!=null){
                    p.add(temp.right);
                }
            }
        }
    }

 

posted on 2015-01-15 09:27  ywf—java  阅读(169)  评论(0编辑  收藏  举报

导航