首页 > 编程语言 > 详细

6-11 先序输出叶结点 (15 分) 数据结构与算法题目集(中文)

时间:2019-08-11 18:55:03      阅读:71      评论:0      收藏:0      [点我收藏+]

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

函数接口定义:

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

复习考研,书上只写了中序遍历的非递归算法,所以找一道题试试前序遍历能不能写出来。

代码:
#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 Insert(BinTree T,ElementType X) {
    if(T == NULL) {
        T = (BinTree)malloc(sizeof(TNode));
        T -> Left = T -> Right = NULL;
        T -> Data = X;
    }
    else if(X < T -> Data) {
        T -> Left = Insert(T -> Left,X);
    }
    else {
        T -> Right = Insert(T -> Right,X);
    }
    return T;
}
BinTree CreatBinTree();
void PreorderPrintLeaves( BinTree BT );

int main()
{
    BinTree BT = CreatBinTree();
    printf("Leaf nodes are:");
    PreorderPrintLeaves(BT);
    printf("\n");

    return 0;
}
BinTree CreatBinTree() {
    BinTree Bt = NULL;
    int n;
    ElementType ch;
    scanf("%d",&n);
    for(int i = 0;i < n;i ++) {
        getchar();
        scanf("%c",&ch);
        Bt = Insert(Bt,ch);
    }
    return Bt;
}
void PreorderPrintLeaves( BinTree BT ) {
    BinTree b[100];
    int c = 0;
    if(BT) b[c ++] = BT;
    while(c != 0) {
        BinTree temp = b[-- c];
        if(!(temp -> Left || temp -> Right)) printf(" %c",temp -> Data);
        if(temp -> Right) b[c ++] = temp -> Right;
        if(temp -> Left) b[c ++] = temp -> Left;
    }
}

 

6-11 先序输出叶结点 (15 分) 数据结构与算法题目集(中文)

原文:https://www.cnblogs.com/8023spz/p/11335929.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!