void PreorderPrintLeaves(BinTree BT) {
if (BT == NULL) {
return; // 空树,直接返回
}
// 如果是叶结点,输出
if (BT->Left == NULL && BT->Right == NULL) {
printf(" %c", BT->Data);
}
// 递归遍历左子树
PreorderPrintLeaves(BT->Left);
// 递归遍历右子树
PreorderPrintLeaves(BT->Right);
}
在书写这个代码的过程中,我们可以归纳出树的编写特点,我们根据是哪种排列顺序进而得出我们递归的顺序,要注意对树是否为空进行判断,单独输出,因为该题的编写是根据先序排列的方式所以我们使用的是先进行是否为叶子节点的判断,然后进行左子树、右子树的递归
在对于二叉树的学习当中,我在根据题目所给的二叉树图像进行二叉树的历遍当中,我们可以使用先序排列、中序排序和后序排序,根据所学的转换方法的知识点,我将其化为更为简单的方法去理解,当我们使用先序排列时,我们在每个节点的左边画个小圆圈,然后我们从根节点开始进行连线,按照先左后右的顺序进行,这在我们后续的二叉树的建立当中,我们根据题目所给的先序排列或后序排列和中序排列可以进行二叉树的构建,我们不断使用递归的手法进行二叉树的建立,第一步我们是对比寻找到根节点,然后进行左右子树的建立,其中含有各自的左子树的先序排列和中序排列。在这其中的代码书写过程当中,我们需要关注我们所选的排列方式,进而去去构建我们的历遍函数。在我们后续的线索化二叉树当中,我们利用树当中的空指针域进行信息的标记,这意味着我们对于空间的更全面的利用。