函数接口定义:
void PreorderPrintLeaves( BinTree BT ); //其中BinTree结构定义如下: typedef struct TNode *Position; typedef Position BinTree; struct TNode{ ElementType Data; BinTree Left; BinTree Right; };
函数PreorderPrintLeaves应按照先序遍历的顺序输出给定二叉树BT的叶结点,格式为一个空格跟着一个字符。
裁判测试程序样例:
#include <stdio.h> #include <stdlib.h> typedef char ElementType; typedef struct TNode *Position; typedef Position BinTree; struct TNode{ ElementType Data; BinTree Left; BinTree Right; }; BinTree CreatBinTree(); /* 实现细节忽略 */ void PreorderPrintLeaves( BinTree BT ); int main() { BinTree BT = CreatBinTree(); printf("Leaf nodes are:"); PreorderPrintLeaves(BT); printf("\n"); return 0; } /* 你的代码将被嵌在这里 */
思路:依然使用递归的套路,首先判断空树,是空则不返回任何数。然后判断这个节点是否为叶节点(即他既没有左孩子也没有又孩子)。然后在从左到右递归即可。
代码实现:
void PreorderPrintLeaves( BinTree BT ){ if(!BT) return; if(!BT->Left && !BT->Right){ printf(" %c",BT->Data); } PreorderPrintLeaves(BT->Left); PreorderPrintLeaves(BT->Right); }