PTA 6-11 先序输出叶结点

本题要求按照先序遍历的顺序输出给定二叉树的叶结点。

函数接口定义:

void PreorderPrintLeaves( BinTree BT );

其中BinTree结构定义如下:

typedef struct TNode *Position;
typedef Position BinTree;
struct TNode{
    ElementType Data;
    BinTree Left;
    BinTree Right;
};

函数PreorderPrintLeaves应按照先序遍历的顺序输出给定二叉树BT的叶结点,格式为一个空格跟着一个字符。

裁判测试程序样例:

#include 
#include 

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;
}
/* 你的代码将被嵌在这里 */

输出样例(对于图中给出的树):

PTA 6-11 先序输出叶结点_第1张图片

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);
        }
    }
}

 补充说明:和之前那道二叉树遍历中的先序遍历差不多,只是多了一步判断是否为叶子结点,如果既没有左孩子,也没有右孩子,则是叶节点,需要输出该节点。

你可能感兴趣的:(数据结构与算法题目集(中文),算法,数据结构,c语言,笔记)