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

Java基础 - 多叉树、森林和二叉树之间的转换

2016-11-22 16:26 267 查看
/**
* @author wb
*
*	森林、树和二叉树之间的转换
*	有序树、森林和二叉树之间有一一映射的关系,可以相互转换。
*	多叉树向二叉树转换的方法如下:
*	(1)加虚线:同一个父节点的相邻兄弟节点之间加虚线。
*	(2)抹实线:每个节点只保留它与最左子节点的连线,与其他子节点的连线都抹掉。
*	(3)虚改实:虚线改为实线。
*	例如,如图所示就是多叉树向二叉树转换的结果:
*				 A										 A
*			  │││ │ │ │									 │
*		 B────┘CD E F └─────G						 B───┘
*		│││		 ││	        │		--->			 ││
*	  G─┘HI	   J─┘└─K	    L					G────┘└──C
*	  ││	   │	│						    ││		 │
*	M─┘N	   O	P					    M───┘└──H    └──D
*											│		│	    │
*											└──N	└── I	└──E
*															   ││
*															J──┘└──F
*														    ││
*														 O──┘└──K
*																│
*								图11.12多叉树转换为二叉树				P
*
*	多叉树转换成二叉树的思想就是:所有子节点只保留子节点,其他子节点转换为左子节点的右子节点链。
*	按照这种思路,森林也可以转换成二叉树——只要把森林当成一棵根节点被删除的多叉树即可。如下图所示将森林转换成二叉树的结果:
*		 	 A			B     	 C							 A
*			│││		   │││		│││							│ │
*		 D──┘E└─F	 G─┘H└─I  J─┘K└─L				  D─────┘ └────B
*		│││	 ││		 ││		  ││		--->		 ││			   ││
*	  M─┘N└O P└Q    R┘└S	 T┘└U				  M──┘└──E		 G─┘└─────C
*	 ││				  ││						  ││	 ││		 ││		  │
*	V┘└W			 X┘└Y						V─┘└─N	P┘└─F	R┘└H   J──┘
*												│	 │	│		│  │   ││
*												└W	 └O └Q		└S └I T┘└─K
*																 │	  │   │
*															   X─┘	  └U  └─L
*															   │
*								图11.13 森林转换为二叉树		   	   └Y
*
*	反过来,二叉树也可恢复出对应的多叉树、森林,恢复方法如下:
*	(1)加虚线:如某节点I是父节点的左子节点,则为该节点I的右孩子链的所有节点分别与节点I的父节点添加连线。
*	(2)抹线:把有虚线的节点与原父节点的连线抹去。
*	(3)整理:虚改实并按层排列。
*	如下图所示把二叉树转化为多叉树。
*							A					    A
*							│					  ││ ││
*			 	 		  B─┘					B─┘D F└─G
*						 ││			--->		│  │
*		  	  		   C─┘└─D				   B┘ E┘
*							││
*			 	 	 	  E─┘└F
*				  	  		  │
*				  	 	 	  └G
*								图11.14 二叉树转换为多叉树
*	如下图所示把二叉树转化为森林。
*						 A					A		C		E
*
4000
││					││				││
*			 		  B─┘└─C		      B─┘└─D     	  F─┘└─H
*			 		  │	   │							  │
*			 		  └D   └E	--->					G─┘
*							│
*				 		  F─┘
*						 ││
*			  		   G─┘└─H
*								图11.15 二叉树转换为森林
*
*		* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*		*	如果二叉树的根节点的右子节点链只有一个节点,那么转换出来的森林将有两棵树;		*
*		*	如果二叉树的根节点的右子节点链有N个节点,那么转换出来的森林将有N+1棵树。		*
*		* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: