依据昨天制定的计划和同学的建议今天我把Java和数据结构结合起来,根据分析网上的代码完成了一个简单的平衡二叉树的Java程序,具体代码如下:
//经过修改后的代码如下 package com.company; import java.util.Stack; class Node{ int data; Node left; Node right; public Node(int data) { this.data = data; }//结点 } public class AVL { Node root; public void add(int value) { this.add(value, this.root); } public void add(int value, Node node) { if(this.root == null) { this.root = new Node(value); }else { //大于放在右边、判断 if(value > node.data) { if(node.right == null) { node.right = new Node(value); }else { add(value, node.right); } }else {//小于等于放在左边、判断 if(node.left == null) { node.left = new Node(value); }else { add(value, node.left); } } }//二叉树子结点判断 //在添加节点时刻就进行判断旋转 if(getHeight(root.right) - getHeight(root.left) > 1) { if(getHeight(root.right.left) > getHeight(root.right.right)) { rightRotate(root.right); } leftRotate(root); return; } if(getHeight(root.left) - getHeight(root.right) > 1) { if(getHeight(root.left.right) > getHeight(root.left.left)) { leftRotate(root.left); } rightRotate(root); } } //得到树的高度 public int getHeight(Node node) { if(node == null) { return 0; }else { return Math.max(node.left == null ? 0 : getHeight(node.left), node.right == null ? 0 : getHeight(node.right)) + 1; } } //左旋转 public void leftRotate(Node node) { Node temp = node.right; node.right = temp.left; temp.left = node; this.root = temp; } //右旋转 public void rightRotate(Node node) { Node temp = node.left; node.left = temp.right; temp.right = node; this.root = temp; } //中序遍历用来输出平衡后的二叉树 public void inOrder() { Node temp = this.root; Stack<Node> stack = new Stack<Node>(); while(!stack.isEmpty() || temp != null) { if(temp != null) { stack.push(temp); temp = temp.left; }else { temp = stack.pop(); System.out.print(temp.data + " "); temp = temp.right; } } } public static void main(String[] args) {//主类 // TODO Auto-generated method stub int[] arr = {10,12,8,9,7,6}; AVL avl = new AVL(); for(int i=0; i<arr.length; i++) { avl.add(arr[i]); } avl.inOrder();System.out.println(); System.out.println(avl.getHeight(avl.root)); System.out.println(avl.root.data); } }