packagemystudy;importjava.io.UnsupportedEncodingException;importjava.util.LinkedList;importjava.util.Queue;importjava.util.Stack;public classTree {privateTreeNode root;publicTree() {
};publicTree(TreeNode root) {this.root =root;
}public voidinitTree() {
root= new TreeNode(8);
root.setLeft(new TreeNode(5));
root.getLeft().setLeft(new TreeNode(7));
root.getLeft().setRight(new TreeNode(4));
root.setRight(new TreeNode(9));
root.getRight().setRight(new TreeNode(6));
root.getRight().setLeft(new TreeNode(10));
}public voidpreOrderTraverse() {
preOrderTraverse(root);
}public voidpreOrderTraverse(TreeNode node) {if (node != null) {
System.out.println(node.getValue());
preOrderTraverse(node.getLeft());
preOrderTraverse(node.getRight());
}
}public voidnPreOrderTraverse() {
Stack stack = new Stack();
TreeNode node=root;while (node != null || !stack.isEmpty()) {while (node != null) {
System.out.println(node.getValue());
stack.push(node);
node=node.getLeft();
}if (!stack.isEmpty()) {
node=stack.pop();
node=node.getRight();
}
}
}public voidinOrderTraverse() {
inOrderTraverse(root);
}public voidinOrderTraverse(TreeNode node) {if (node != null) {
inOrderTraverse(node.getLeft());
System.out.println(node.getValue());
inOrderTraverse(node.getRight());
}
}public voidnInOrderTraverse() {
Stack stack = new Stack();
TreeNode node=root;while (node != null || !stack.isEmpty()) {while (node != null) {
stack.push(node);
node=node.getLeft();
}if (!stack.isEmpty()) {
node=stack.pop();
System.out.println(node.getValue());
node=node.getRight();
}
}
}public voidpostOrderTraverse() {
postOrderTraverse(root);
}public voidpostOrderTraverse(TreeNode node) {if (node != null) {
postOrderTraverse(node.getLeft());
postOrderTraverse(node.getRight());
System.out.println(node.getValue());
}
}public voidnPostOrderTraverse() {
Stack stack = new Stack();
TreeNode node=root;
TreeNode preNode= null;while (node != null || !stack.isEmpty()) {while (node != null) {
stack.push(node);
node=node.getLeft();
}if (!stack.isEmpty()) {
node=stack.peek();if (node.getRight() == null || node.getRight() ==preNode) {
node=stack.pop();
System.out.println(node.getValue());
preNode=node;
node= null;
}else{
node=node.getRight();
}
}
}
}public voidlevelTraverse() {
levelTraverse(root);
}public voidlevelTraverse(TreeNode node) {if (node != null) {
Queue queue = new LinkedList();
queue.offer(node);while (!queue.isEmpty()) {
TreeNode mNode=queue.poll();if (mNode != null) {
System.out.println(mNode.getValue());if (mNode.getLeft() != null) {
queue.offer(mNode.getLeft());
}if (mNode.getRight() != null) {
queue.offer(mNode.getRight());
}
}
}
}
}public inttreeDepth() {returntreeDepth(root);
}public inttreeDepth(TreeNode node) {if (node == null) {return 0;
}int leftDepth =treeDepth(node.getLeft());int rightDepth =treeDepth(node.getRight());return leftDepth > rightDepth ? leftDepth + 1 : rightDepth + 1;
}public intminMaxSpan() {
Queue queue = new LinkedList();if (root != null) {int visitedNum = 0, addedNum = 1, levelNum = 1, min, max, depth = 0, minLevel = 0, maxLevel = 0;
min= max =root.getValue();
queue.offer(root);while (!queue.isEmpty()) {
TreeNode mNode=queue.poll();if (min >mNode.getValue()) {
min=mNode.getValue();
minLevel=depth;
}else if (max
max=mNode.getValue();
maxLevel=depth;
}
visitedNum++;if (mNode.getLeft() != null) {
queue.offer(mNode.getLeft());
addedNum++;
}if (mNode.getRight() != null) {
queue.offer(mNode.getRight());
addedNum++;
}if (visitedNum ==levelNum) {
depth++;
levelNum=addedNum;
}
}
System.out.println("min:" + min + "max:" + max + "minLevel:"
+ minLevel + "maxLevel:" + maxLevel + "树的高度:" +depth);return Math.abs(minLevel -maxLevel);
}return -1;
}public classTreeNode {privateTreeNode left;privateTreeNode right;private intvalue;public TreeNode(TreeNode left, TreeNode right, intvalue) {this.left =left;this.right =right;this.value =value;
}public TreeNode(intvalue) {this(null, null, value);
}publicTreeNode getLeft() {returnleft;
}public voidsetLeft(TreeNode left) {this.left =left;
}publicTreeNode getRight() {returnright;
}public voidsetRight(TreeNode right) {this.right =right;
}public intgetValue() {returnvalue;
}public void setValue(intvalue) {this.value =value;
}
}/***@paramargs
*@throwsUnsupportedEncodingException*/
public static void main(String[] args) throwsUnsupportedEncodingException {//TODO Auto-generated method stub
Tree tree = newTree();
tree.initTree();
System.out.println("树中最大值最小值层数之差:" +tree.minMaxSpan());
System.out.println("前序递归:");
tree.preOrderTraverse();
System.out.println("前序非递归:");
tree.nPreOrderTraverse();
System.out.println("中序递归:");
tree.inOrderTraverse();
System.out.println("中序非递归:");
tree.nInOrderTraverse();
System.out.println("后序递归:");
tree.postOrderTraverse();
System.out.println("后序非递归:");
tree.nPostOrderTraverse();
System.out.println("按层次遍历:");
tree.levelTraverse();
System.out.println("树的高度:" +tree.treeDepth());
}
}