打印叶节点到根的路径

本文介绍了一个C语言实现的二叉树初始化、节点分配和打印从叶子节点到根节点的递归函数。通过`init()`函数创建了包含1-7节点的二叉树,并使用`printLeavesToRoot()`函数按顺序输出节点数据,展示如何遍历结构。
摘要由CSDN通过智能技术生成
#include<stdio.h>
#include<malloc.h>

typedef struct node{
    int data;
    struct node *lchild;
    struct node *rchild;
} *binaryTree;

binaryTree init();
void printLeavesToRoot(binaryTree root, int* arr, int pos);

int main()
{
    /*
    input:
                1
            2       3
          4   5   6   7
    */
    binaryTree root = init();
    int arr[100] = {0}, pos = 0;
    printLeavesToRoot(root, arr, pos);
}

binaryTree init()
{
    binaryTree node1 = (binaryTree)malloc(sizeof(struct node)); node1->data = 1;
    binaryTree node2 = (binaryTree)malloc(sizeof(struct node)); node2->data = 2;
    binaryTree node3 = (binaryTree)malloc(sizeof(struct node)); node3->data = 3;
    binaryTree node4 = (binaryTree)malloc(sizeof(struct node)); node4->data = 4; 
    binaryTree node5 = (binaryTree)malloc(sizeof(struct node)); node5->data = 5;
    binaryTree node6 = (binaryTree)malloc(sizeof(struct node)); node6->data = 6;
    binaryTree node7 = (binaryTree)malloc(sizeof(struct node)); node7->data = 7;
    node1->lchild = node2; node1->rchild = node3;
    node2->lchild = node4; node2->rchild = node5;
    node3->lchild = node6; node3->rchild = node7;
    node4->lchild = NULL; node4->rchild = NULL;
    node5->lchild = NULL; node5->rchild = NULL;
    node6->lchild = NULL; node6->rchild = NULL;
    node7->lchild = NULL; node7->rchild = NULL;
    return node1;
}

void printLeavesToRoot(binaryTree root, int *arr, int pos)
{
    if(root == NULL)
        return;
    arr[pos++] = root->data;
    if(root->lchild == NULL && root->rchild == NULL)
    {
        pos --;
        for(int i = pos; i >=0; i--)
            printf("%d ", arr[i]);
        printf("\n");
        return;
    }
    printLeavesToRoot(root->lchild, arr, pos);
    printLeavesToRoot(root->rchild, arr, pos);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值