本题要求按照先序遍历的顺序输出给定二叉树的叶结点。
函数接口定义:
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;
}
/* 你的代码将被嵌在这里 */
输出样例(对于图中给出的树):
Leaf nodes are: D E H I
示例代码:
void PreorderPrintLeaves( BinTree BT )
{BinTree tree=BT;if(tree!=NULL){if(tree->Left==NULL&&tree->Right==NULL)//判断是否是叶节点{printf(" %c",tree->Data);}if(tree->Left!=NULL){PreorderPrintLeaves(tree->Left);}if(tree->Right!=NULL){PreorderPrintLeaves(tree->Right);}}
}
补充说明:和之前那道二叉树遍历中的先序遍历差不多,只是多了一步判断是否为叶子结点,如果既没有左孩子,也没有右孩子,则是叶节点,需要输出该节点。