package binarytree;
import java.util.LinkedList;
import java.util.Queue;
/**
* @author Gavenyeah
* @date Time: 2016年4月10日下午10:14:08
* @des:
*/
public class BinaryTree {
Node root = null;// 二叉樹的根節點
// 二叉樹的節點插入
public void insert(int val) {
Node newNode = new Node(val);
if (root == null) {
root = newNode;
return;
}
Node current = root;
Node parent = null;
while (true) {
parent = current;
if (val < current.data) {
current = current.left;
if (current == null) {
parent.left = newNode;
return;
}
} else if (val > current.data) {
current = current.right;
if (current == null) {
parent.right = newNode;
return;
}
}
}
}
// 利用數組建立(中序)排序二叉樹
public void buildTree(int arrays[]) {
for (int i = 0; i < arrays.length; i++) {
insert(arrays[i]);
}
}
// 中序遍歷二叉樹
public void inOrder(Node head) {
if (head != null) {
inOrder(head.left);
visit(head);
inOrder(head.right);
}
}
public void inOrder() {
this.inOrder(this.root);
}
public void preOrder(Node head) {
if (head != null) {
visit(head);
preOrder(head.left);
preOrder(head.right);
}
}
public void preOrder() {
this.preOrder(this.root);
}
public void postOrder(Node head) {
if (head != null) {
postOrder(head.left);
postOrder(head.right);
visit(head);
}
}
public void postOrder() {
this.postOrder(this.root);
}
//層次遍歷二叉樹
public void layerOrder(Node head){
if(head==null){
return ;
}
Queue<Node>queue=new LinkedList<Node>();
queue.add(head);
while(queue.size()>0){
head=queue.poll();
visit(head);
if(head.left!=null){
queue.add(head.left);
}
if(head.right!=null){
queue.add(head.right);
}
}
}
public void layerOrder(){
this.layerOrder(this.root);
}
// 層次遍歷輸出樹的高度
public int levelOfTree(Node head) {
int level = 0;// 記錄樹的層數
int front = 0;// 標記當前取出的節點標號
int rear = 0;// 標記當前存入隊列的節點標號
int last = 1;// 記錄當前行最後一個節點的編號,初始值爲1,即第一層最後一個節點的編號爲1
Queue<Node> queue = new LinkedList<Node>();
queue.add(head);
rear++;// 根節點加入隊列
while (queue.size()>0) {
head = queue.poll();
front++;
if (head.left != null) {
queue.add(head.left);
rear++;
}
if (head.right != null) {
queue.add(head.right);
rear++;
}
// 取出的節點數到達每層最後一個節點後,改變樹的層數,並使last等於下一層最後一個節點
if (front == last) {
level++;
last = rear;
}
}
return level;
}
public int levelOfTree() {
return this.levelOfTree(this.root);
}
public void visit(Node node) {
System.out.print(node.data + "\t");
}
}
class Node {
int data;
Node left;
Node right;
public Node(int data) {
this.data = data;
this.left = null;
this.right = null;
}
}
Java二叉樹(一)--定義及前序、中序、後序、層次遍歷及求高度的實現
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.