DRAMIVT的专栏

import java.util.*;public class Main{ChainBin bt;public Main(){}public Main(ChainBin bt) {this.bt=bt;}public static void main(String[] args) {ChainBin root = null;char select;do{System.out.println("1.设置二叉树的根元素,\n2.添加二叉树节点\n3.先序遍历\n4.中序遍历\n5.后序遍历\n6按层遍历\n7二叉树深度\0退出");Scanner s = new Scanner(System.in);select = s.next().charAt(0);System.out.println(select+"–>");switch (select) {case '1':root = Init();System.out.println(root.Data.data);break;case '2':System.out.println("添加二叉树节点");new ChainTree().BinAdd(root);break;case '3':System.out.println("先序遍历!");new ChainTree().BinTree_BAA(root, new Meth(root));System.out.println();break;case '4':System.out.println("中序遍历!");new ChainTree().BinTree_ABA(root, new Meth(root));System.out.println();break;case '5':System.out.println("后序遍历!");new ChainTree().BinTree_AAB(root, new Meth(root));System.out.println();break;case '6':System.out.println("按层遍历!");new ChainTree().BinTree_level(root, new Meth(root));System.out.println();break;case '7':System.out.println("二叉树深度!");System.out.println("深度为"+new ChainTree().BinTreeDepth(root));System.out.println();break;case '0':break;default:break;}}while(select!='0');new ChainTree().BinTreeClear(root);root=null;}static ChainBin Init(){ChainBin node= new ChainBin();System.out.println("please input the node.");Scanner s = new Scanner(System.in);int a=s.nextInt();node.Data=new DATA(a);node.left = null;node.right = null;return node;}}interface Method{void fun();void fun(ChainBin bt);}class Meth implements Method{ChainBin root =null;public Meth(ChainBin root) {this.root = root;}public void fun(ChainBin bt){System.out.println(bt.Data.data);}public void fun() {}}class DATA{public int data;public DATA(int a) {this.data = a;}}class ChainBin{DATA Data;ChainBin left;ChainBin right;}class ChainTree{ChainBin node=null;public ChainTree(){}public ChainTree(ChainBin node) {this.node = node;}public ChainBin getNode() {return node;}//input the ChainBin to the ChainTreeboolean BinAdd(ChainBin bt , ChainBin node ,int n){//add the Bin to ChainTree//bt is the father Bin , node is the child ,n 1 is left other 2 rightif(bt==null){return false;}System.out.println("input data");Scanner s = new Scanner (System.in);node.Data = new DATA(s.nextInt());switch(n){case 1:{if (bt.left!=null){//left isn't existreturn false;}else{bt.left=node;System.out.println("left ok");}}break;case 2:{if (bt.right!=null){//right isn't existreturn false;}else{bt.right=node;System.out.println("left ok");}}break;default :return false;}return true;}void BinAdd(ChainBin bt ){//add the Bin to ChainTreeChainBin node=null ,parent=null;DATA data=null;char select;node=new ChainBin();System.out.println("input root data ..");Scanner s = new Scanner(System.in);data = new DATA(s.nextInt());parent = BinTreeFind(bt, data);if(parent==null){System.out.println("find not..");return ;}System.out.println("1.to add Left Tree\n2.to add Left Tree");do {select =s.next().charAt(0);if (select=='1' || select=='2') {BinAdd(parent, node, (int)(select-'0'));System.out.println("ok");}} while (select!='1' && select!='2');System.out.println("over");}//get the left right TreeBinChainBin BinTreeLeft(ChainBin bt){if(bt!=null){return bt.left;}else{return null;}}ChainBin BinTreeRight(ChainBin bt){if(bt!=null){return bt.right;}else{return null;}}//cheek the Tree is empty;boolean BinTreeIsEmpty (ChainBin bt){if(bt ==null){return true;}else{return false;}}int BinTreeDepth(ChainBin bt){int dep1 , dep2 ;if(bt==null){return 0;}else{dep1 = BinTreeDepth(bt.left);dep2 = BinTreeDepth(bt.right);if(dep1 > dep2){return dep1 +1;}else{return dep2 +1;}}}//check from TreeBinChainBin BinTreeFind(ChainBin bt,DATA data){ChainBin p=null;if ( bt==null){System.out.println("null");return bt;}else{ //recursionif(bt.Data.data == data.data){System.out.println(bt.Data.data+"has"+data.data);return bt;}else{if((p=BinTreeFind(bt.left,data))!=null){System.out.println("—>>");return p;}else if ((p=BinTreeFind(bt.right,data))!=null){System.out.println("—>>");return p;}else{return null;}}}}//clear the TreeBinvoid BinTreeClear(ChainBin bt){if(bt!=null){BinTreeClear(bt.left);BinTreeClear(bt.right);}bt=null;}//send out Treevoid BinTree_BAA(ChainBin bt,Method oper){//前序递归if(bt!=null){oper.fun(bt);BinTree_BAA(bt.left,oper); //recursionBinTree_BAA(bt.right,oper); //recursion}return;}void BinTree_ABA(ChainBin bt,Method oper){//中序递归if(bt!=null){oper.fun(bt);BinTree_ABA(bt.left,oper); //recursionBinTree_ABA(bt.right,oper); //recursion}return;}void BinTree_AAB(ChainBin bt,Method oper){//后序递归if(bt!=null){oper.fun(bt);BinTree_AAB(bt.left,oper); //recursionBinTree_AAB(bt.right,oper); //recursion}return;}void BinTree_level(ChainBin bt ,Method oper){ChainBin p=null;ChainBin q[] = new ChainBin[1000];int head=0,tail=0;if (bt!=null) {tail = (tail+1)%1000;q[tail] = bt;}while (head!=tail) {head = (head+1)%1000;p = q[head];oper.fun(p);if (p.left!=null) {tail = (tail+1)%1000;q[tail] = p.left;}if (p.right!=null) {tail = (tail+1)%1000;q[tail] = p.right;}}return ;}}

,也只有懂的接受自己的失败,才能更好的去发挥自身优势,也才能够更好的去实现自我

DRAMIVT的专栏

相关文章:

你感兴趣的文章:

标签云: