java二叉树代码实现_java二叉树实现代码

public classTree {private TreeNode root = null;publicTree() {

root= new TreeNode(1, "A");

}private classTreeNode {private intkey;privateString data;private booleanisVisted;privateTreeNode leftChild;privateTreeNode rightChild;public TreeNode(intkey, String data) {this.key =key;this.data =data;this.leftChild = null;this.rightChild = null;this.isVisted = false;

}

}/*** 创建一颗二叉树

* A

* B C

* D E F

* createBinTree:().

*@author*@paramroot*/

public voidcreateBinTree(TreeNode root) {

TreeNode newNodeB= new TreeNode(2, "B");

TreeNode newNodeC= new TreeNode(3, "C");

TreeNode newNodeD= new TreeNode(4, "D");

TreeNode newNodeE= new TreeNode(5, "E");

TreeNode newNodeF= new TreeNode(6, "F");

root.leftChild=newNodeB;

root.rightChild=newNodeC;//newNodeC.rightChild = newNodeF;//newNodeB.leftChild = newNodeD;//newNodeB.rightChild = newNodeE;

root.rightChild.rightChild =newNodeF;

root.leftChild.leftChild=newNodeD;

root.leftChild.rightChild=newNodeE;

}public booleanisEmpty() {return root == null;

}//树的高度

public intheight() {returnheight(root);

}//节点个数

public intsize() {returnsize(root);

}private intheight(TreeNode subTree) {if (subTree == null)return 0;int i =height(subTree.leftChild);int j =height(subTree.rightChild);return i < j ? j + 1 : i + 1;

}private intsize(TreeNode subTree) {if (subTree == null)return 0;return 1 + size(subTree.leftChild) +size(subTree.rightChild);

}//返回双亲节点

publicTreeNode parent(TreeNode element) {return (root == null || root ==element)? null: parent(root, element);

}publicTreeNode parent(TreeNode subTree, TreeNode element) {if (subTree == null)return null;if (subTree.leftChild == element || subTree.rightChild ==element) {//返回父节点地址

returnsubTree;

}

TreeNode p;//先在左子树中查找,如果左子树中没有找到,则到右子树中查找

if ((p = parent(subTree.leftChild, element)) != null)return p; //递归左子树中搜索

else

returnparent(subTree.rightChild, element);

}publicTreeNode getLeftChildNode(TreeNode element) {return element != null ? element.leftChild : null;

}publicTreeNode getRightChildNode(TreeNode element) {return element != null ? element.rightChild : null;

}publicTreeNode getRoot() {returnroot;

}//在释放某个节点时,该节点的左右子树都已经释放,//所以应该采用后续遍历,当访问某个节点时将该节点的存储空间释放

public voiddistroy(TreeNode subTree) {//删除根为subTree的子树

if (subTree != null) {//删除左子树

distroy(subTree.leftChild);//删除右子树

distroy(subTree.rightChild);//删除根节点

subTree = null;

}

}public voidtraverse(TreeNode subTree) {

System.out.println("key:" + subTree.key + "--name:" +subTree.data);

traverse(subTree.leftChild);

traverse(subTree.rightChild);

}//前序遍历

public voidperOrder(TreeNode subTree) {if (subTree != null) {

visted(subTree);

perOrder(subTree.leftChild);

perOrder(subTree.rightChild);

}

}//中序遍历

public voidinOrder(TreeNode subTree) {if (subTree != null) {

perOrder(subTree.leftChild);

visted(subTree);

perOrder(subTree.rightChild);

}

}//后序遍历

public voidpostOrder(TreeNode subTree) {if (subTree != null) {

perOrder(subTree.leftChild);

perOrder(subTree.rightChild);

visted(subTree);

}

}//将二叉树镜面对称

public voidmirror(TreeNode subTree) {if (subTree == null)return;

TreeNode node= newTreeNode(subTree.key, subTree.data);

node.leftChild=subTree.leftChild;

subTree.leftChild=subTree.rightChild;

subTree.rightChild=node.leftChild;

mirror(subTree.leftChild);

mirror(subTree.rightChild);

}public voidvisted(TreeNode subTree) {

subTree.isVisted= true;

System.out.println("key:" + subTree.key + "---data:" +subTree.data);

}//测试

public static voidmain(String[] args) {

Tree bt= newTree();

bt.createBinTree(bt.root);

System.out.println(bt.size()+ "---size");

System.out.println(bt.height()+ "---height");

System.out.println("**************前序遍历************");

bt.perOrder(bt.root);

System.out.println("************镜面对称**前序遍历************");

bt.mirror(bt.root);

bt.perOrder(bt.root);//System.out.println("**************中序遍历************");//bt.inOrder(bt.root);//

//System.out.println("**************后序遍历************");//bt.postOrder(bt.root);

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值