Java实现二叉树

来源:互联网 发布:会计应对大数据时代 编辑:程序博客网 时间:2024/06/06 18:52

本案例需要完成的任务定义如下:实现一个二叉树,实现增加节点和树的遍历等功能。

 

定义“二叉树”节点:

对于树节点,关键要素是节点自身数值data、左子节点left和右子节点right。

public class TNode {//元素类型为int的节点private int data;private TNode left;private TNode right;//定义构造器public TNode(int i, TNode lft, TNode rt){data = i;left = lft;right =rt;}public TNode(int i){this(i,null,null);}public TNode(){this(0,null,null);}//更改节点数值public void setData(int i){data = i;}//读取节点数值public int getData(){return data;}//更改left子节点public void setLeft(TNode tn){left = tn;}//读取left子节点public TNode getLeft(){return left;}//更改right子节点public void setRight(TNode tn){right = tn;}//读取right子节点public TNode getRight(){return right;}//打印节点的值public void printTNode(){System.out.print(data+"->");}}

实现“二叉树”的遍历:

应用递归实现二叉树遍历是很好的思路。遍历的方法按照顺序不同可分为前序遍历、中序遍历和后序遍历,分别表示最先遍历父节点(顺序:父节点->left节点->right节点)、中间遍历父节点和最后遍历父节点。本例采用前序遍历。

package tree;public class BinaryTree {//树的基本元素:根节点TNode root;//构造器:指定根节点public BinaryTree(TNode rt){root = rt;}public BinaryTree(){root = null;}//开始递归遍历,采用前序遍历public void traverseTree(TNode rt){if(rt!=null)rt.printTNode();if(rt.getLeft()!=null)traverseTree(rt.getLeft());if(rt.getRight()!=null)traverseTree(rt.getRight());}//在树中增加节点tn,指定相应的父节点father;public void addTNode(TNode tn,TNode father){//当子节点数量少于或等于1时允许插入tn,插入顺序先left后rightif(father == null){father = tn;}if(father.getLeft()==null){father.setLeft(tn);}else if(father.getRight()==null){father.setRight(tn);}else{System.out.println("illegal, already have two child nodes!");}}}

 

测试程序:

测试了生成二叉树、增加子节点以及遍历二叉树等功能,运行正常。

package tree;public class TraverseTree {public static void main(String[] args) {// TODO Auto-generated method stubTNode root = new TNode(99);BinaryTree btr = new BinaryTree(root);TNode tn1 = new TNode(1);TNode tn2 = new TNode(2);TNode tn3 = new TNode(3);TNode tn4 = new TNode(4);btr.addTNode(tn1, root);btr.addTNode(tn2, root);btr.addTNode(tn3, tn1);btr.addTNode(tn4, tn1);btr.traverseTree(root);}}


0 0
原创粉丝点击