在数据结构中,树结构算是最重要的一种结构之一,从文件系统到网络结构,无处不存在着树结构的身影。在树结构中,二叉树又是其中最常用的结构,其重要性不言而喻。
一、定义
二叉树的定义是:每个节点至多有两个子树,并且二叉树的子树有左右之分,其次序不能任意颠倒【数据结构——严蔚敏】。从代码上看,二叉树的节点包括左右子树和本节点的值,那么可定义如下:
public class TNode{
public int value;//节点值
public TNode left;//左节点
public TNode right;//右节点
}
二叉树中的基本操作包括:创建二叉树、遍历二叉树(前序、中序、后序)和求二叉树的高度。
创建二叉树:
public TNode create(TNode t){
if(t==null) t=new TNode();
System.out.println("Input a number:");
Scanner sc=new Scanner(System.in);
int data=sc.nextInt();
if(data==0){
return null;
}else{
t.value=data;
t.left=create(t.left);
t.right=create(t.right);
}
return t;
}
遍历二叉树:
//前序遍历
public void preTree(TNode tree){
if(tree==null) return;
System.out.println("node="+tree.value);
if(tree.left!=null) preTree(tree.left);
if(tree.right!=null) preTree(tree.right);
}
//中序遍历
public void midTree(TNode tree){
if(tree==null) return;
if(tree.left!=null) midTree(tree.left);
System.out.println("node="+tree.value);
if(tree.right!=null) midTree(tree.right);
}
//后序遍历
public void postTree(TNode tree){
if(tree==null) return;
if(tree.left!=null) postTree(tree.left);
if(tree.right!=null) postTree(tree.right);
System.out.println("node="+tree.value);
}
求二叉树的高度:
//求二叉树的高度
public int getHeight(TNode t){
if(t==null) return 0;
if(t.left==null && t.right==null){
return 1;
}
int left_h=getHeight(t.left);
int right_h=getHeight(t.right);
return left_h>right_h?left_h+1:right_h+1;
}
三、综合实例代码
package org.xizi.tree.binarytree;
import java.io.IOException;
import java.io.InputStream;
import java.util.Scanner;
public class BinaryTree {
//树节点
public class TNode{
public int value;//节点值
public TNode left;//左节点
public TNode right;//右节点
}
private TNode root;
//构造树
public TNode create(TNode t){
if(t==null) t=new TNode();
System.out.println("Input a number:");
Scanner sc=new Scanner(System.in);
int data=sc.nextInt();
if(data==0){
return null;
}else{
t.value=data;
t.left=create(t.left);
t.right=create(t.right);
}
return t;
}
//求二叉树的高度
public int getHeight(TNode t){
if(t==null) return 0;
if(t.left==null && t.right==null){
return 1;
}
int left_h=getHeight(t.left);
int right_h=getHeight(t.right);
return left_h>right_h?left_h+1:right_h+1;
}
//前序遍历
public void preTree(TNode tree){
if(tree==null) return;
System.out.println("node="+tree.value);
if(tree.left!=null) preTree(tree.left);
if(tree.right!=null) preTree(tree.right);
}
//中序遍历
public void midTree(TNode tree){
if(tree==null) return;
if(tree.left!=null) midTree(tree.left);
System.out.println("node="+tree.value);
if(tree.right!=null) midTree(tree.right);
}
//后序遍历
public void postTree(TNode tree){
if(tree==null) return;
if(tree.left!=null) postTree(tree.left);
if(tree.right!=null) postTree(tree.right);
System.out.println("node="+tree.value);
}
public static void main(String[] args){
BinaryTree bt=new BinaryTree();
bt.root=bt.create(bt.root);
bt.postTree(bt.root);
System.out.println("Height="+bt.getHeight(bt.root));
}
}