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

/**
 * @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
 *						││					││				││
 *			 		  B─┘└─C		      B─┘└─D     	  F─┘└─H
 *			 		  │	   │							  │
 *			 		  └D   └E	--->					G─┘
 *							│
 *				 		  F─┘
 *						 ││
 *			  		   G─┘└─H
 *								图11.15 二叉树转换为森林
 *
 *		* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
 *		*	如果二叉树的根节点的右子节点链只有一个节点,那么转换出来的森林将有两棵树;		*
 *		*	如果二叉树的根节点的右子节点链有N个节点,那么转换出来的森林将有N+1棵树。		*
 *		* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 */

你可能感兴趣的:(Java基础)