4-11 先序输出叶节点

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #1e9421 }
p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #822d0f }
p.p3 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #c81b13 }
p.p4 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #c42275 }
p.p5 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #000000 }
p.p6 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #539aa4 }
p.p7 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px "PingFang SC"; color: #1e9421 }
p.p8 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #000000; min-height: 16.0px }
p.p9 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #294c50 }
span.s1 { }
span.s2 { font: 14.0px "PingFang SC" }
span.s3 { color: #c81b13 }
span.s4 { color: #822d0f }
span.s5 { color: #000000 }
span.s6 { color: #703daa }
span.s7 { color: #0435ff }
span.s8 { color: #c42275 }
span.s9 { color: #539aa4 }
span.s10 { color: #1e9421 }
span.s11 { font: 14.0px "PingFang SC"; color: #1e9421 }
span.s12 { font: 14.0px Menlo; color: #000000 }
span.s13 { font: 14.0px Menlo; color: #703daa }
span.s14 { font: 14.0px Menlo }
span.s15 { color: #3e1e81 }
span.s16 { color: #78492a }
span.s17 { color: #294c50 }

4-11 先序输出叶结点   (15分)

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

函数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
 1 //  4-11 先序输出叶结点
 2 //
 3 //  Created by Haoyu Guo on 05/02/2017.
 4 //  Copyright ? 2017 Haoyu Guo. All rights reserved.
 5 //
 6 #include <stdio.h>
 7 #include<iostream>
 8 #include <stdlib.h>
 9 using namespace std;
10 #define OVERFLOW -2
11 typedef char ElementType;
12 typedef struct TNode *Position;
13 typedef Position BinTree;
14 struct TNode{
15     ElementType Data;
16     BinTree Left;
17     BinTree Right;
18 };
19 int CreatBinTree(BinTree &T)//创建二叉树
20 {
21     char ch;//按先序的方式输入
22     cin >> ch;//递归中自然带着一些重复,就不需要循环了
23     if (ch == ‘#‘)  T=NULL;
24     else {
25         if (!(T = (BinTree)malloc(sizeof(TNode)))) exit(OVERFLOW);
26         T->Data = ch;
27         CreatBinTree(T->Left);
28         CreatBinTree(T->Right);
29     }
30     return 0;
31 }
32
33 void PreorderPrintLeaves( BinTree BT );
34
35 int main()
36 {
37     BinTree BT;
38     CreatBinTree(BT);//创建一个
39     printf("Leaf nodes are:");
40     PreorderPrintLeaves(BT);
41     printf("\n");
42     return 0;
43 }
44 /* 你的代码将被嵌在这里 */
45 void PreorderPrintLeaves( BinTree BT)//先序输出
46 {
47     if(BT==NULL) return;
48     else{
49     if(BT->Left==NULL&&BT->Right==NULL)
50        printf(" %c",BT->Data);
51     PreorderPrintLeaves(BT->Left);
52     PreorderPrintLeaves(BT->Right);
53   }
54 }
时间: 2024-12-06 15:36:57

4-11 先序输出叶节点的相关文章

6-11 先序输出叶结点

6-11 先序输出叶结点(15 分) 本题要求按照先序遍历的顺序输出给定二叉树的叶结点. 函数接口定义: void PreorderPrintLeaves( BinTree BT ); 其中BinTree结构定义如下: typedef struct TNode *Position; typedef Position BinTree; struct TNode{ ElementType Data; BinTree Left; BinTree Right; }; 函数PreorderPrintLea

PAT树_层序遍历叶节点、中序建树后序输出、AVL树的根、二叉树路径存在性判定、奇妙的完全二叉搜索树、最小堆路径、文件路由

<pre class="code"><span style="font-family: %value; font-size: 14px;">03-树1. List Leaves (25) Given a tree, you are supposed to list all the leaves in the order of top down, and left to right. Input Specification: Each inpu

二叉树的层序遍历、二叉树叶节点输出算法、求二叉树的高度、层序创建一棵二叉树

二叉树的层序遍历 1 void LevelorderTraversal(BinTree BT) 2 { 3 std::queue<BinTree> Queue; 4 BinTree T; 5 if (!BT) 6 return; //若是空树则直接返回 7 Queue.push(BT); 8 while (!Queue.empty()) 9 { 10 T = Queue.front(); 11 Queue.pop(); 12 printf("%c ", T->Data

[华为机试练习题]24.删除链表中的反复节点、剩余节点逆序输出

题目 描写叙述: 题目描写叙述: 输入一个不带头节点的单向链表(链表的节点数小于100),删除链表中内容反复的节点(反复的节点所有删除),剩余的节点逆序倒排. 要求实现函数: void vChanProcess(strNode * pstrIn,strNode * pstrOut); [输入] pstrIn:输入一个不带头节点的单向链表 [输出] pstrOut:删除内容反复的节点(反复的节点所有删除).剩余节点逆序输出(不带头节点,链表第一个节点的内存已经申请). [注意]仅仅须要完毕该函数功

[华为机试练习题]24.删除链表中的重复节点、剩余节点逆序输出

题目 描述: 题目描述: 输入一个不带头节点的单向链表(链表的节点数小于100),删除链表中内容重复的节点(重复的节点全部删除),剩余的节点逆序倒排. 要求实现函数: void vChanProcess(strNode * pstrIn,strNode * pstrOut); [输入] pstrIn:输入一个不带头节点的单向链表 [输出] pstrOut:删除内容重复的节点(重复的节点全部删除),剩余节点逆序输出(不带头节点,链表第一个节点的内存已经申请). [注意]只需要完成该函数功能算法,中

链表逆序输出 ---九度1511

题目描述: 输入一个链表,从尾到头打印链表每个节点的值. 输入: 每个输入文件仅包含一组测试样例. 每一组测试案例包含多行,每行一个大于0的整数,代表一个链表的节点.第一行是链表第一个节点的值,依次类推.当输入到-1时代表链表输入完毕.-1本身不属于链表. 输出: 对应每个测试案例,以从尾到头的顺序输出链表每个节点的值,每个值占一行. 样例输入: 1 2 3 4 5 -1 样例输出: 5 4 3 2 1 解题思路: 方法一:直接用数组存储数据,然后反向输出,不过好像通不过.为什么? 方法二:利用

求 一棵二叉树中权值最大和最小的叶节点之间的距离

#include <iostream> #include <vector> //结点的数据结构 struct Node { int _data; int _weight; Node* _left; Node* _right; Node(const int& x = 0,int weight=0) :_left(NULL) , _right(NULL) , _data(x) , _weight(weight) {} }; //建树 Node* CreateTree(const

1111 多个整数的逆序输出

题目来源:https://acm.zzuli.edu.cn/zzuliacm/problem.php?id=1111Description输入n和n个整数,以与输入顺序相反的顺序输出这n个整数.要求不使用数组,而使用递归函数实现.递归函数实现过程如下:void inverse(int n){    if(n >1)   {        (1) 读入一个整数,存入num;        (2)  将后面的n-1个数逆序输出: inverse(n-1);          (3)  输出num: 

2015-4-2的阿里巴巴笔试题:乱序的序列保序输出(bit数组实现hash)

分布式系统中的RPC请求经常出现乱序的情况.写一个算法来将一个乱序的序列保序输出.例如,假设起始序号是1,对于(1, 2, 5, 8, 10, 4, 3, 6, 9, 7)这个序列,输出是:123, 4, 567, 8, 9, 10 上述例子中,3到来的时候会发现4,5已经在了.因此将已经满足顺序的整个序列(3, 4, 5)输出为一行. 1 #include<stdio.h> 2 3 int main() 4 { 5 int num ; 6 while(scanf("%d"