基本API
初始化 查找 遍历
package 二叉树;
import java.util.Scanner;
import javax.print.DocFlavor.INPUT_STREAM;
class Tree{
String data;
Tree leftTree;
Tree rightTree;
}
public class BinaTree {
static final int MAX = 20;
static Scanner scanner = new Scanner(System.in);
Tree init(){//初始化
Tree node;
if((node = new Tree())!=null){
System.out.println("输入一个根节点的数据:");
node.data = scanner.next();
node.leftTree = null;
node.rightTree = null;
if(node != null){
return node;
}
else {
return null;
}
}
return null;
}
void addTreeNode(Tree node) {//添加树节点
Tree pnode, parent;
String data;
int menusel;
if ((pnode = new Tree()) != null) {
System.out.println("输入二叉树节点数据:");
pnode.data = scanner.next();
pnode.leftTree = null;
pnode.rightTree = null;
System.out.println("输入节点的父节点:");
data = scanner.next();
parent = find(node, data);
if (parent == null) {
System.out.println("没找到该父节点!");
pnode = null;
return;
}
System.out.println("1.添加树的左节点\n2.添加树的右节点");
do {
menusel = scanner.nextInt();
if (menusel == 1 || menusel == 2) {
if (parent == null) {
System.out.println("不存在父节点!");
} else {
switch (menusel) {
case 1:
if (parent.leftTree != null) {
System.out.println("左节点不为空!");
} else {
parent.leftTree = pnode;
}
break;
case 2:
if (parent.rightTree != null) {
System.out.println("右节点不为空!");
} else {
parent.rightTree = pnode;
}
break;
default:
System.out.println("请输入1或者2!");
break;
}
}
}
} while (menusel != 1 && menusel != 2);
}
}
Tree find(Tree treeNodeTree , String data){//查找节点
Tree ptr;
if(treeNodeTree == null){
return null;
}
else {
if(treeNodeTree.data.equals(data)){
return treeNodeTree;
}
else{
if((ptr =find(treeNodeTree.leftTree, data))!=null){
return ptr;
}
if((ptr=find( treeNodeTree.rightTree, data))!=null){
return ptr;
}
else {
return null;
}
}
}
}
Tree getLeft(Tree tree){
if(tree!=null){
return tree.leftTree;
}
return null;
}
Tree getRight(Tree tree){
if(tree != null){
return tree.rightTree;
}
return null;
}
int isEmpty(Tree tree){
if(tree==null){
return 1;
}
return 0;
}
int treeDepth(Tree tree){
int depthLeft,depthRight;
if(tree == null){
return 0;
}
else{
depthLeft= treeDepth(tree.leftTree);
depthRight=treeDepth(tree.rightTree);
if(depthLeft>depthRight){
return depthLeft+1;
}
else {
return depthRight+1;
}
}
}
void clear(Tree tree){
if(tree!=null){
clear(tree.leftTree);
clear(tree.rightTree);
tree = null;
}
}
void showData(Tree tree){
System.out.println(tree.data);
}
void DLRtree(Tree tree){//先序遍历
if(tree != null){
showData(tree);
DLRtree(tree.leftTree);
DLRtree(tree.rightTree);
}
}
void LDRtree(Tree tree){//中序遍历
if(tree != null){
LDRtree(tree.leftTree);
showData(tree);
LDRtree(tree.rightTree);
}
}
void LRDtree(Tree tree){//后序遍历
if(tree != null){
LRDtree(tree.leftTree);
LRDtree(tree.rightTree);
showData(tree);
}
}
}