二叉树的定义
/** 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); } } } }