[图解] 由中序和前序/后序确立唯一的二叉树的思路与过程

一. 由中序和前序确立二叉树

思路: 由前序确立分支点, 在中序中找到, 确定左右子树; 前序下一个点, 递归至树完全生成(从左分支画起)

eg1:

  • 前序: ABCDEFGHIJ
  • 中续: CDBFEAIHGJ
- 前序: ABCDEFGHIJ
- 中序: CDBFEAIHGJ

由前序确立分支点A, 在中序中找到A, 确定左右子树(中序中A左边的为左子树,右边为右子树)
					(CDBFE)	        A        (IHGJ)
				                /         \
				           

前序换成下一个结点B, 在中序中找到B, 确定左右子树(中序中B左边的为左子树,右边为右子树)
				  (CDBFE)	        A        (IHGJ)
				                /         \
				         (CD)  B(EF)     

前序换成下一个结点C, 在中序中找到C, 确定左右子树(中序中C左边的为左子树,右边为右子树)
				  (CDBFE)	        A        (IHGJ)
				                /         \
				         (CD)  B(EF)
				            /      \
				    (null)C(D)

//此时C左子树为null(空),右子树为D,不存在二义性,因此可以确定C的子树形状. C分支绘画完成
				  (CDBFE)	        A        (IHGJ)
				                /         \
				         (CD)  B(EF)
				            /      \
				    (null)C(D)
				           \
				             D

前序换成下一个结点E(由于D无二义性可直接跳过简化步骤), 在中序中找到E, 确定左右子树(中序中E左边的为左子树,右边为右子树)
 					(CDBFE)	        A        (IHGJ)
				                /         \
				         (CD)  B(EF)
				         /        \
				  (null)C(D)     (F)E(null)
			            \
			     		 D
			      
//此时E左子树为F,右子树为null(空),不存在二义性,因此可以确定E的子树形状. E分支绘画完成
  					(CDBFE)	        A        (IHGJ)
				                /         \
				         (CD)  B(EF)
				         /         \
				  (null)C(D)     (F)E(null)
			            \			/
			             D      		F
			             
前序换成下一个结点G(由于F无二义性可直接跳过简化步骤), 在中序中找到G, 确定左右子树(中序中G左边的为左子树,右边为右子树)
  					(CDBFE)	        A        (IHGJ)
				                /         \
				         (CD)  B(EF)		(HI)G(J)
				         /         \
				  (null)C(D)     (F)E(null)
			            \			/
			             D      		F

前序换成下一个结点H, 在中序中找到H, 确定左右子树(中序中H左边的为左子树,右边为右子树)
  						(CDBFE)	        A        (IHGJ)
				                /        		 \
				         (CD)  B(EF)				(HI)G(J)
				         /         \		   			/  		\
				  (null)C(D)     (F)E(null)		(I)H(null)
			            \			/
			             D      		F
			             
//此时H左子树为I,右子树为null(空),不存在二义性,因此可以确定H的子树形状. H分支绘画完成
   						(CDBFE)	        A        (IHGJ)
				                /        		 \
				         (CD)  B(EF)				(HI)G(J)
				         /         \		   			/  		\
				  (null)C(D)     (F)E(null)		(I)H(null)
			            \			/		       	/
			             D      		F			I
			             
//此时G左子树分支完成,右子树为J,不存在二义性,因此可以确定G的子树形状. G分支绘画完成
   						(CDBFE)	        A        (IHGJ)
				                /        		 \
				         (CD)  B(EF)				(HI)G(J)
				         /         \		   			/  		\
				  (null)C(D)     (F)E(null)		(I)H(null)		J
			            \			/		       	/
			             D      		F			I

//由前序: ABCDEFGHIJ &中续: CEDBHGJIFA确定的唯一树已经画完

--------------------------------------我是分割线--------------------------------------

二. 由中序和后序确立二叉树

思路: 剔除后续最后一个点(根结点)后, 由后序(从右向左)确立分支点, 在中序中找到, 确定左右子树; 前序下一个点, 递归至树完全生成(从右分支画起)

eg2:

  • 后序: DCFEBIHGA
  • 中续: DCBFEAGHI
- 后序: DCFEBIHGA
- 中续: DCBFEAGHI

后续的最后一个点即为根节点(A)
			(DCBFE)	        A        (GHI)

后序换成上一个结点G, 在中序中找到G, 确定左右子树(中序中G左边的为左子树,右边为右子树)
			(DCBFE)	        A        (GHI)
					/	     		\
								(null)G(HI)
后序换成上一个结点H, 在中序中找到H, 确定左右子树(中序中H左边的为左子树,右边为右子树)
			(DCBFE)	        A        (GHI)
					/	     		\
								(null)G(HI)
										\
									(null)H(I)
									
//此时H左子树为null(空),右子树为I,不存在二义性,因此可以确定H的子树形状. H分支绘画完成
			(DCBFE)	        A        (GHI)
					/	     		\
								(null)G(HI)
										\
									(null)H(I)
											\
										    	I
										    	
后序换成上一个结点B(由于I无二义性可直接跳过简化步骤), 在中序中找到B, 确定左右子树(中序中B左边的为左子树,右边为右子树)
			(DCBFE)	        A        (GHI)
					/	     		\
			(DC)B(FE)			(null)G(HI)
										\
									(null)H(I)
											\
										    	I
										    	
后序换成上一个结点E, 在中序中找到E, 确定左右子树(中序中E左边的为左子树,右边为右子树)
   		(DCBFE)	        A        (GHI)
					/	     		\
			(DC)B(FE)			(null)G(HI)
					\						\
					(null)E(F)			(null)H(I)
											\
										    	I
										    	
//此时E左子树为null(空),右子树为F,不存在二义性,因此可以确定E的子树形状. E分支绘画完成
   		(DCBFE)	        A        (GHI)
					/	     		\
			(DC)B(FE)			(null)G(HI)
					\						\
					(null)E(F)			(null)H(I)
							\				\
							F			    	I
							
后序换成上一个结点C(由于F无二义性可直接跳过简化步骤), 在中序中找到C, 确定左右子树(中序中C左边的为左子树,右边为右子树)
   		(DCBFE)	        A        (GHI)
					/	     		\
			(DC)B(FE)			(null)G(HI)
			/		\						\
		(D)C(null)	(null)E(F)			(null)H(I)
							\				\
							F			    	I
							
//此时C左子树为D,右子树为null(空),不存在二义性,因此可以确定C的子树形状. C分支绘画完成
   		(DCBFE)	        A        (GHI)
					/	     		\
			(DC)B(FE)			(null)G(HI)
			/		\						\
		(D)C(null)	(null)E(F)			(null)H(I)
		/					\				\
		D					F			    	I
		
//由后序: DCFEBIHGA &中续: DCBFEAGHI确定的唯一树已经画完

								Copyright: dolor_059

  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值