欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

生成树的算法

程序员文章站 2022-06-09 23:13:45
...

一、实验目的及要求

根据老师所给的代码,执行所有生成树的算法。输出要求:生成满二叉树,跟踪每一个节点的生成过程,即输出该节点所在的层及在该层的位置,以最左边的节点为0。

二、实验内容及步骤


class QueueNode <T>
{
	T data;
	QueueNode<T> next;
	QueueNode()
	{
		this.next = null;
	}
	QueueNode(T data)
	{
		this.data = data;
		this.next = null;
	}	
}
public class QueueDemo<T> {
	QueueNode<T> head = new QueueNode<T>();
	public void enQueue(T data)
	{
		QueueNode<T> tail;
		tail = head;
		//move to the last node of queue
		while (tail.next != null)
			tail = tail.next;
		QueueNode<T> node = new QueueNode<T>(data);
		// insert the new node at the tail of queue
		tail.next = node;		
	}	
	public T deQueue()
	{
		QueueNode<T> node;
		node = head.next;
		head.next = node.next;
		return node.data;
	}
	public boolean isEmpty()
	{
		if (head.next ==  null)
			return true;
		else
			return false;
	}
	void Tranverse()  //遍历
	{
		QueueNode<T> node = head.next;
		while (node != null)
		{
			System.out.println(node.data);
			node = node.next;
		}
	}


import circleSqQueue.QueueDemo;
import java.util.Scanner;
class TreeNode 
{
	int data;  //结点的数据域
	TreeNode lchild;  //左孩子域
	TreeNode rchild;  //右孩子域
	TreeNode()
	{
		this.lchild = null;
		this.rchild = null;
	}
	TreeNode(int data)
	{
		this.data = data;
		this.lchild = null;
		this.rchild = null;
	}
	int getData()
	{
		return data;
	}
}
public class TreeDemo {
	static TreeNode BuildTree(TreeNode node)
	{
		int data;
		//输入根结点的数据
		System.out.print("Input an Integer(0--null):");
		Scanner sc = new Scanner(System.in); 
		data = sc.nextInt();		
		if (data == 0)
			node = null;
		else
		{
			node = new TreeNode (); //构造新结点
			node.data = data;
			node.lchild = BuildTree(node.lchild);
			node.rchild = BuildTree(node.rchild);
		}
		return node;
	}	
	static void PreTranverse(TreeNode T) //先根遍历
	{
		if (T != null)
		{
			System.out.print(T.data+" ");
			PreTranverse(T.lchild);
			PreTranverse(T.rchild);
		}			
	}	
	static void InTranverse(TreeNode T)  //中根遍历
	{
		if (T != null)
		{
			InTranverse(T.lchild);
			System.out.print(T.data+" ");
			InTranverse(T.rchild);
		}			
	}	
	static void PostTranverse(TreeNode T)   //后根遍历
	{
		if (T != null)
		{
			PostTranverse(T.lchild);
			PostTranverse(T.rchild);
			System.out.print(T.data+" ");
		}			
	}
	static TreeNode BuildbyLevel(TreeNode rootl) //层次遍历
	{
		int data;
		//输入一个表示根节点的整数
		System.out.print("Input an Integer(0--null):");
		Scanner sc = new Scanner(System.in); 
		data = sc.nextInt();		
		if (data != 0)
		{
			rootl = new TreeNode(data);
			//构建队列
			QueueDemo<TreeNode> thequeue = new QueueDemo<TreeNode>();
			thequeue.enQueue(rootl);
			while(!thequeue.isEmpty())
			{
				TreeNode thenode = thequeue.deQueue();
                //输入左子树的数据
				System.out.print("Input the data of "+thenode.getData()+"'s left child(0--null):");
				data = sc.nextInt();
				if (data != 0)
				{
					TreeNode lnode = new TreeNode(data);
					thenode.lchild = lnode;
					thequeue.enQueue(lnode);
				}
				//输入右子树的数据
				System.out.print("Input the data of "+thenode.getData()+"'s right child(0--null):");
				data = sc.nextInt();
				if (data != 0)
				{
					TreeNode rnode = new TreeNode(data);
					thenode.rchild = rnode;
					thequeue.enQueue(rnode);
				}
			}
		}
		sc.close();
		return rootl;
	}
	public static void main(String[] args) {
		 //Scanner sc = new Scanner(System.in);
	   	 //rootl = BuildTree(rootl);
		 //sc.close();
		 TreeNode rootl = null;
		 rootl = BuildbyLevel(rootl);
         System.out.println("先根遍历为");
		 PreTranverse(rootl);
		 System.out.println();
System.out.println("中根遍历为");
		 InTranverse(rootl);
		 System.out.println();	
        System.out.println("后根遍历为");	
		 PostTranverse(rootl);
	}
}

生成树的算法

相关标签: 实验报告