二叉树的每一个节点包含三块区域,一个值,一个左指针,一个右指针
package TwoTree;
public class Node {
private int Data;
private Node Lnode;
private Node Rnode;
public Node(int Data,Node Lnode,Node Rnode) {
this.Data=Data;
this.Lnode=Lnode;
this.Rnode=Rnode;
//定义节点的属性
}
public int getData() {
return Data;
}
public void setData(int data) {
Data = data;
}
public Node getLnode() {
return Lnode;
}
public void setLnode(Node lnode) {
Lnode = lnode;
}
public Node getRnode() {
return Rnode;
}
public void setRnode(Node rnode) {
Rnode = rnode;
}
//三个值的get和set函数
}
package TwoTree;
import java.util.LinkedList;
public class Test {
int a[]={1,2,3,4,5,6,7,8,9,0};
//数组内存储着构建二叉树的出事元素
int i;
LinkedList<Node> link=new LinkedList<Node>();
//定义一个节点队列
private Test() {
for(i=0;i<a.length;i++)
{
link.add(new Node(a[i], null, null));
//将初始化后的节点添加到队列中
}
for( i=0;i<link.size()/2-1;i++)
{
//System.out.println(link.get(i).getData());
link.get(i).setLnode(link.get(2*i+1));
//队列里的元素从0开始,所以,当构造时,子节点的下标要+1
link.get(i).setRnode(link.get(2*i+2));
//因为节点i的子节点为2*i和2*i+1
}
//最后一个有子节点的节点要拿出来单独判断,他可能只有一个左节点
link.get(i).setLnode(link.get(2*i+1));
if(link.size()/2==1)
{
link.get(i).setRnode(link.get(2*i+2));
}
Preorder(link.get(0));
//将数的根节点进行遍历
}
private void Preorder(Node node) {
if(node==null)
{
return;
//当该节点为空时,即代表该树的一条分支已经遍历完成
}
else
{
System.out.print(node.getData()+" ");
Preorder(node.getLnode());
Preorder(node.getRnode());
//先序遍历,先输出根节点,再访问他们的左子节点和右子节点
}
}
public static void main(String[] args) {
Test test=new Test();
}
}
结果:
1 2 4 8 9 5 0 3 6 7