一、二叉树先序遍历的核心代码
二、先序遍历过程图解
以以上这棵树为例:
三、文字叙述递归过程
说明:括号里面为打印这个树的值
(A) 访问 A 这棵树的根节点
(B) 递归处理 A 的左子树(访问左子树的根节点也就是 B)
(D) 递归处理 B 的左子树(访问左子树的根节点也就是 D)
此时发现 D 没有左子树,不需要继续递归
又发现 D 没有右子树,也不需要继续递归
这时,D 这棵树也就处理完成
回到 B 这棵树中,B这棵树,根节点处理完成,左子树处理 完成,接下来 处理 B 的右子树
(E) 递归处理 B 的右子树(访问右子树的根节点也就是 E)
(G) 递归处理 E 的左子树(访问左子树的根节点也就是 G)
下一步就是递归处理 G 的左子树,发现左子树为空,就不需要递归处理
再下一步要递归处理 G 的右子树,发现右子树也为空,也就不需要处理
G 是 E 的左子树,对于 E 这个树来说,根节点和左子树都访问完了,然后需要递归访问右子树
E 的右子树也是空树,不需要递归处理,E 这个树也就访问完了
E 是 B 的右子树,对于 B 这个树来说,根节点,左子树,右子树都访问完了
B 是 A 的左子树,对于 A 这个树来说,根节点,左子树都访问完了,下一步就是要访问 A 的右子树,需要递归处理 C 这个树
(C) 递归处理 C 这个子树,先访问根节点 C
访问 C 的左子树,左子树为空,不要递归处理
访问 C 的右子树,右子树为 F
(F) 访问 F 的根节点,递归访问 F 的左子树,左子树为空,不需要处理,再递归 F 的右子树,右子树也为空,也不需要处理
F 处理完了之后,C 的右子树处理完了,此时 C 这个树也就处理完了
C 又是 A 的右子树,那么 A 这个树也就处理完了