您的位置:首页 > 编程语言 > Java开发

java实现二叉树创建和遍历

2016-03-08 21:34 531 查看
今天晚上我学习了java语言的二叉树创建和遍历算法。

实现的机制和上一节课差不多。

代码如下:

package 二叉树链表;

public class Node {

private int value;
private Node leftChild;
private Node rightChild;

public Node(int value) {
super();
this.value = value;
}

public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
public Node getLeftChild() {
return leftChild;
}
public void setLeftChild(Node leftChild) {
this.leftChild = leftChild;
}
public Node getRightChild() {
return rightChild;
}
public void setRightChild(Node rightChild) {
this.rightChild = rightChild;
}

}


上面的代码是树的每一个节点的代码。

下面的是创建树和遍历:

package 二叉树链表;

import java.util.ArrayList;

public class MyTree {
private int[] saveValue = {1,3,6,9,13,23,27,29,34,39};
private ArrayList<Node> list = new ArrayList<Node>();

public static void main(String[] args) {
MyTree mt = new MyTree();
Node root = mt.createTree();
mt.rigSearch(root);
}

public Node createTree(){
for(int i=0;i<saveValue.length;i++){
Node node = new Node(saveValue[i]);
list.add(node);
}
for(int i=0;i<list.size()/2;i++){
Node node = list.get(i);
Node leftNode = list.get(i*2+1);
node.setLeftChild(leftNode);
if(i*2+2<list.size()){
Node rightNode = list.get(i*2+2);
node.setRightChild(rightNode);
}
}
return list.get(0);
}

public void preSearch(Node root){
System.out.println(root.getValue());
if(root.getLeftChild()!=null){
preSearch(root.getLeftChild());
}
if(root.getRightChild()!=null){
preSearch(root.getRightChild());
}
}
public void midSearch(Node root){
if(root.getLeftChild()!=null){
preSearch(root.getLeftChild());
}
System.out.println(root.getValue());
if(root.getRightChild()!=null){
preSearch(root.getRightChild());
}
}
public void rigSearch(Node root){
if(root.getLeftChild()!=null){
preSearch(root.getLeftChild());
}
if(root.getRightChild()!=null){
preSearch(root.getRightChild());
}
System.out.println(root.getValue());
}
}


创建一个数组来创建数据,用树的节点来存放创建好的数据,然后用容器ArrayList来存放每一个树的节点,这样就可以形成一组森林了。

然后用父节点来为每一个叶子节点来赋值。

父节点的序号是节点数总数的二分之一也就是:list.size()/2

而对应父节点的子节点:左孩子是父节点序号*2+1,右孩子是父节点序号*2+2。

还要判断有孩子的序号是否会越界。

然后就可以赋值了。

遍历树的方法是用递归。然后调换代码顺序就可以实现左中右遍历了。结果如下图:



这是前序遍历的结果。

这就是今天晚上的学习成果了,学习了java二叉树的构造与遍历。

等下预习哈夫曼算法
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: