📄 nob.asm
字号:
;二叉树按节点编号遍历算法
;
; A
; / \
; / \
; B C
; / \ /
; D E F
; / \ / / \
; G H I J K
;
TREE EQU 20H ;二叉树存放的片外RAM页面。
OUT EQU 21H ;被访问节点信息输出存放的片外RAM页面。
ORG 0000H
LJMP TEST
ORG 100H
TEST: MOV DPTR,#DATS;将二叉树的结构信息存放到片外RAM中。
MOV P2,#TREE
MOV R0,#0
MOV R2,#16
COPY: CLR A
MOVC A,@A+DPTR
MOVX @R0,A
INC DPTR
INC R0
DJNZ R2,COPY
LCALL NOORDER ;调用二叉树按节点编号遍历算法
STOP: LJMP STOP ;遍历顺序为ABCDEFGHIJK。
DATS: DB 0BH,41H,42H,43H
DB 44H,45H,46H,00H
DB 47H,48H,49H,00H
DB 4AH,4BH,00H,00H
NOORDER:MOV DPH,#OUT;指向输出存放节点信息的片外RAM页面。
MOV DPL,#0
MOV R2,#0 ;页面内256个字节。
CLR A
CLEAR: MOVX @DPTR,A ;初始化输出区。
INC DPTR
DJNZ R2,CLEAR
MOV P2,#TREE;指向二叉树存放页面。
MOV R0,#0
MOV DPH,#OUT;指向输出存放节点信息的片外RAM页面。
MOV DPL,#0
MOVX A,@R0 ;读取二叉树有效节点总数。
MOVX @DPTR,A ;存放到输出区的00H单元。
MOV R2,A ;初始化控制访问操作的计数器。
INC R0 ;指向根节点。
INC DPTR ;指向输出区第一个存放位置。
JZ ORDEND ;如果是空树,则结束访问。
NO1: MOVX A,@R0 ;读取一个树中的节点。
INC R0 ;调整指针。
JZ NO1 ;是虚节点则跳过。
MOVX @DPTR,A ;是实节点则保存到输出区,完成访问的目的。
INC DPTR ;调整输出指针。
DJNZ R2,NO1 ;访问完全部实节点否?
ORDEND: RET ;结束访问。
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -