⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 binary.txt

📁 汇编写的二叉树 输入相应大节点 自动产生相应大二叉树
💻 TXT
字号:
		PAGE 60,132
TITLE BINTREE
.MODEL	SMALL
.STACK	64
.DATA
BUFF1	DB	10 DUP(?)					;暂存结点数
BUFF2	DB	40 DUP(?)					;顺序存储结点数组
BUFF3	DB	40 DUP(?)					;结点中序存储
BUFF4	DB	40 DUP(?)					;结点后序存储
NODE	DB	2,?,2 DUP(?)					;存储输入字符缓冲区
MESS0	DB	0AH,0DH,'$'
MESS1 DB	'Please enter the root:','$'
MESS2	DB	"'S left children:",'$'
MESS3	DB	"'S right children:",'$'
MESS4	DB	"PreOrderTraverse is:",'$'
MESS5	DB	"InOrderTraverse is:",'$'
MESS6	DB	"PostOrderTraverse is:",'$'
NODES	DW 0H
NODSI DW 0H
;===================================================================
.CODE
;===================================================================
				;主过程
;===================================================================
MAIN	PROC	FAR				
MOV	AX,@DATA				
MOV	DS,AX								;初始化段寄存器					

LEA	DX,MESS1								;提示输入根结点
MOV	AH,09H
INT	21H			
CALL	ROOT								;调用ROOT过程输入根结点

MOV	DL,'$'			
MOV	[SI],DL								;在字符串末尾加'$'符
MOV	[DI],DL

CALL	HUICHE								;回车换行
CALL	PREORDER							;先序输出
CALL	INORDER							;中序输出

CALL	POSTOUT							;后序处理
CALL	POSTORDER							;后序输出

MOV	AH,1
INT	21H
MOV	AX,4C00H
INT	21H
MAIN	ENDP
;=====================================================================
				;回车换行
;=====================================================================
HUICHE	PROC	NEAR				
MOV	DX,OFFSET MESS0				
MOV	AH,09
INT	21H
RET
HUICHE 	ENDP
;=====================================================================
				;根(ROOT)结点输入
;===================================================================== 
ROOT	PROC	NEAR
LEA	DX,NODE							;将字符存入缓冲区并回显
MOV	AH,0AH
INT 	21H
MOV	DL,NODE+2
CMP	DL,0DH
JE		ENDROOT
CALL	HUICHE							;回车换行
CALL	HUIXIAN						;显示该输入结点的内容

MOV	BP,OFFSET BUFF4				;将后序存储区的首地址赋给BP寄存器
MOV	DI,OFFSET BUFF3				;将中序存储区的首地址赋给DI寄存器
MOV	SI,OFFSET BUFF2					;将顺序存储区的首地址赋给SI寄存器
MOV	WORD PTR NODSI,SI
MOV	BX,OFFSET BUFF1
MOV	WORD PTR NODES,BX
CALL	CUNCHU
	
MOV	DX,OFFSET MESS2				;询问是否输入左结点
MOV	AH,09H
INT	21H
CALL	LEFT							;输入左结点
ENDROOT:
RET
ROOT 	ENDP 	
;=====================================================================
				;LEFT过程输入左子树
;=====================================================================
LEFT	PROC	NEAR				
LEA	DX,NODE							;将字符存入缓冲区并回显
MOV	AH,0AH
INT 	21H					

MOV	DL,0DH							;是否是回车键
CMP	DL,NODE+2
JE	RIGHTNODE			 				;是则转RIGHTNODE	
CALL	HUICHE					
CALL	HUIXIAN						;显示该输入结点的内容			
CALL	CUNCHU
	
MOV	DX,OFFSET MESS2				;询问是否输入左结点
MOV	AH,09H
INT	21H
CALL	LEFT
JMP	ENDED

RIGHTNODE:
CALL	KONGGE						;存储空格
CALL	RIGHT
ENDED:
RET
LEFT	ENDP	
;=====================================================================
				;RIGHT过程输入右子树	
;=====================================================================
RIGHT	PROC	NEAR				
CALL	HUICHE
CMP	BX,WORD PTR NODES
JE	ENDRET

DEC	BX
MOV	DL,[BX]
MOV	[DI],DL							;中序存储数组

INC	DI
MOV	AH,2
INT	21H

MOV	DX,OFFSET MESS3				;询问是否输入右结点
MOV	AH,09H
INT	21H

LEA	DX,NODE
MOV	AH,0AH
INT	21H

MOV	DL,0DH							;是否是回车键
CMP	DL,NODE+2
JE	RIGHT2								;是则转RIGHT2	
			
CALL	HUICHE
CALL	HUIXIAN		
CALL	CUNCHU

MOV	DX,OFFSET MESS2				;询问是否输入左结点
MOV	AH,09H
INT	21H
CALL	LEFT
JMP	ENDRET

RIGHT2:
CALL	KONGGE
CALL	RIGHT
ENDRET:
RET	
RIGHT	ENDP
;=====================================================================
KONGGE	PROC NEAR					;存储空格
MOV	BYTE PTR[SI],20H
INC	SI
RET
KONGGE ENDP
;=====================================================================
				;显示当前结点的内容
;=====================================================================
HUIXIAN	PROC NEAR
MOV	DL,NODE	+2					;显示该输入结点的内容					
MOV	AH,2							;调用INT中断的2号功能显示一个字符
INT	21H
RET
HUIXIAN	ENDP 
;=====================================================================
				;存储结点数组
;=====================================================================
CUNCHU PROC NEAR
MOV	[BX],DL
MOV	[SI],DL
INC	SI
INC	BX
RET
CUNCHU	 ENDP
;=====================================================================
				; 初始化索引寄存器
;=====================================================================
POSTOUT	PROC	NEAR
LEA	SI,OFFSET BUFF2						;初始化索引寄存器的值				
LEA	DI,OFFSET BUFF3
MOV	BX,WORD PTR NODSI			;将字符串的首地址送给索引指针BX
MOV	DL,[BX]
MOV	[SI],DL
MOV	[DI],DL
INC	SI
INC	DI
INC	BX
CALL	POSTCUN
RET
POSTOUT ENDP
;=====================================================================
				;后序存储数组
;=====================================================================
POSTCUN PROC NEAR
XUNHUAN:
MOV	DL,[BX]
CMP	DL,20H							;比较当前字符是否是空格
JE		KONGE1							
CMP	[BX],'$'							;比较是否是'$'
JE		JIESHU							;是结束循环
MOV	[SI],DL
MOV	[DI],DL
INC	SI
INC	DI
INC	BX
JMP	XUNHUAN
KONGE1:
DEC	SI
MOV	DL,[BX-1]
CMP	DL,20H							;比较上一字符是否是空格
JE		KONGE2							;是则转移KONGE2
INC	BX
JMP	XUNHUAN							;继续循环
KONGE2:
INC	BX
XUNHUAN2:
MOV	DL,[SI]
DEC	DI
CMP	[DI],DL							;比较[SI]和[DI]中的内容是否相等
JE		ENDXUNHUAN					;是结束内循环
MOV	DL,[DI]
MOV	DS:[BP],DL						;存储后序数组
INC	BP
JMP	XUNHUAN2
ENDXUNHUAN:
INC	DI
JMP	XUNHUAN							;继续外层循环
JIESHU:
MOV	DL,'$'			
MOV	DS:[BP],DL						;在字符串末尾加'$'符
RET 
POSTCUN	ENDP
;=====================================================================
				;先序遍历
;=====================================================================
PREORDER PROC NEAR
MOV	DX,OFFSET MESS4
MOV	AH,09H
INT	21H
MOV	BX,WORD PTR NODSI
ADD1:
CMP	BYTE PTR[BX],20H				;比较是否是空格
JE		ADD2							;是则转移ADD2
CMP	[BX],'$'							;比较是否是空格
JE		JIESHU2							;是则结束输出
MOV	DL,[BX]
MOV	AH,02H
INT	21H									;调用中断输出当前字符
INC	BX									;索引指针BX加1						
JMP	ADD1								;检查输出下一字符
ADD2:
INC	BX									;空格不输出,索引指针BX加1
JMP	ADD1								;检查输出下一字符
JIESHU2:
CALL	HUICHE
RET
PREORDER 	ENDP 
;=====================================================================
				;中序遍历
;=====================================================================
INORDER	 PROC NEAR
MOV	DX,OFFSET MESS5				
MOV	AH,09H
INT 	21H
LEA	DX,BUFF3							
MOV	AH,09H
INT	21H
CALL	HUICHE
RET
INORDER	ENDP 	
;=====================================================================
				;后序遍历
;=====================================================================
POSTORDER PROC NEAR
MOV	DX,OFFSET MESS6
MOV	AH,09H
INT 	21H
LEA	DX,BUFF4
MOV	AH,09H
INT	21H
RET
POSTORDER	ENDP 
END	MAIN

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -