遍历二叉树的应用:输出二叉树中的叶子结点

        由于我们说过,在进行二叉树遍历时所走的路线是一样的只是访问结点的时机不同而已,对于这个问题,我们采用任意一种遍历方式;

        只要在输出结点的时候加一个前置的条件判定——“该节点的左右子树是否都为空?”。

void PreOrderPrintLeaves( BinTree BT )
{
 if( BT ) {
     if ( !BT-Left && !BT->Right )
         printf(“%d”, BT->Data );
         PreOrderPrintLeaves ( BT->Left );
         PreOrderPrintLeaves ( BT->Right );
     }
}

完整代码示例

#include <stdio.h>
#include <stdlib.h>

// 定义树节点的结构
typedef struct TreeNode {
    int Data;
    struct TreeNode *Left;
    struct TreeNode *Right;
} TreeNode, *BinTree;

// 创建一个新的节点
BinTree CreateNode(int data) {
    BinTree newNode = (BinTree)malloc(sizeof(TreeNode));
    newNode->Data = data;
    newNode->Left = NULL;
    newNode->Right = NULL;
    return newNode;
}

// 预排序打印叶子节点的函数
void PreOrderPrintLeaves(BinTree BT) {
    if (BT) {
        if (!BT->Left && !BT->Right)
            printf("%d ", BT->Data);
        PreOrderPrintLeaves(BT->Left);
        PreOrderPrintLeaves(BT->Right);
    }
}

// 主函数
int main() {
    // 创建一个简单的二叉树
    //       1
    //      / \
    //     2   3
    //    / \   \
    //   4   5   6

    BinTree root = CreateNode(1);
    root->Left = CreateNode(2);
    root->Right = CreateNode(3);
    root->Left->Left = CreateNode(4);
    root->Left->Right = CreateNode(5);
    root->Right->Right = CreateNode(6);

    // 调用PreOrderPrintLeaves函数并打印叶子节点
    printf("叶子节点: ");
    PreOrderPrintLeaves(root);
    printf("\n");

    // 释放内存
    free(root->Left->Left);
    free(root->Left->Right);
    free(root->Left);
    free(root->Right->Right);
    free(root->Right);
    free(root);

    return 0;
}

 输出结果:

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值