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

FW-binary - tree - with id and sibling connected - java version 2013年12月18日1:21

2013-12-18 14:24 495 查看
package test_kepler;

public class Treeandgraph {
	
	public static int Id = 0;
	class Node
	{
		public Node left_child;
		public Node right_child;
		public String data;
		public Boolean isvisted;
		int layerNum;
		public Node neibor;
		public int parentId;
		public int thisid;
		public Node()
		{
			left_child = null;
			right_child = null;
			data = null;
			isvisted = false;
			neibor = null;
			layerNum = 0;
			
			thisid = ++Id;
		}
		public int getId()
		{
			return thisid;
		}
		public void setLeftChild(Node lftcd)
		{
			this.left_child = lftcd;
			lftcd.parentId = this.thisid;
		}
		public void setRightChild(Node rtcd)
		{
			this.right_child = rtcd;
			rtcd.parentId = this.thisid;
		}
		public int getParentId()
		{
			return this.parentId;
		}
	};
	
	 Node buildTree()
	{
		Node root = new Node();
		root.data = "root";
		root.thisid= 0;
		root.parentId = -1;
		
		Node t1 = new Node();
		t1.data = "t1";
		Node t2 = new Node();
		t2.data = "t2";
		Node t3 = new Node();
		t3.data = "t3";
		Node t4 = new Node();
		t4.data = "t4";
		Node t5 = new Node();
		t5.data = "t5";
		
		root.setLeftChild(t1);
		root.setRightChild(t2);
		t1.setLeftChild(t3);
		t1.setRightChild(t4);
		t2.setLeftChild(t5);
		
		return root;
	}
	//head - right - left;
	static void traverse_pre_order(Node nd)
	{
		if(nd != null)
		{
			System.out.print(nd.data+" ->> ");
			traverse_pre_order(nd.right_child);
			traverse_pre_order(nd.left_child);
		}
	}
	static void DFS(Node nd)
	{
		nd.isvisted = true;
		System.out.print(nd.data+" ->> ");
		if(nd!=null)
		{
			
			if(nd.left_child!=null && nd.left_child.isvisted == false)
			{
				DFS(nd.left_child);
			}
			
			if(nd.right_child!=null && nd.right_child.isvisted == false)
			{
				DFS(nd.right_child);
			}
		}
	}
	
	public static void BFS(Node root)
	{
		 qbytwostc testq = new qbytwostc<Node>();
		 testq.enQueue(root);
		 while(!testq.isEmpty())
		 {
			 Node getout = (Node) testq.dequeue();
			 if(getout.isvisted == false)
			 {
				 getout.isvisted = true;
				 
				 System.out.print(getout.data+" ->> ");
				 
				 if(getout.right_child!=null)
				 {
					 testq.enQueue(getout.right_child);
				 }
				 if(getout.left_child!=null)
				 {
					 testq.enQueue(getout.left_child);
				 }
			 } 
		 }
	}
	///
	public static void BFS_layer(Node root)
	{
		 root.layerNum = 0;
		 qbytwostc testq = new qbytwostc<Node>();
		 testq.enQueue(root);
		 while(!testq.isEmpty())
		 {
			 Node getout = (Node) testq.dequeue();
			 
			 if(!testq.isEmpty())
			 {
				 Node nextto = (Node)testq.getTop();//get the just at the head of the queue;//dequeue then enqueue
				 int i_num = nextto.layerNum;// get the layer id 
				 if(getout.layerNum == i_num && getout.getParentId() == nextto.getParentId())
				 {// if the node has come out and the node in the head of the queue has the same parent then connect
					 getout.neibor = nextto;
				 }
			 }
			 
			 
			 int parentId = getout.layerNum;
			 
			 if(getout.isvisted == false)
			 {
				 getout.isvisted = true;
				 if(getout.neibor!=null)
				 {
					 System.out.println(getout.data+" ->> layer num is = "+getout.layerNum+" neibor is "+getout.neibor.data+" ; ");
				 }
			
				 if(getout.left_child!=null)
				 {
					 getout.left_child.layerNum = parentId+1;//give the layer id to the children;
					 testq.enQueue(getout.left_child);
				 }
				 
				 if(getout.right_child!=null)
				 {
					 getout.right_child.layerNum = parentId+1;//give the layer id to the children;
					 testq.enQueue(getout.right_child);
				 }
				
			 } 
		 }
	}
	///
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Treeandgraph tg = new Treeandgraph();
		Node root = tg.buildTree();
		traverse_pre_order(root);
		System.out.println("this is the DFS");
		BFS_layer(root);
	}

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