【数据结构】树和二叉树的综合应用:基于二叉链表的二叉树叶子结点到根结点的路径的求解

任务描述

设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写算法求出每个叶子结点到根结点的路径。

编程要求

输入

多组数据。每组数据一行,为二叉树的先序序列(序列中元素为‘0’时,表示该结点为空)。当输入只有一个“0”时,输入结束。

输出

每组数据输出n行(n为叶子结点的个数),每行为一个叶子结点到根节点的路径(按照叶子结点从左到右的顺序)。

测试说明

测试输入:

abcd00e00f00ig00h00

abd00e00cf00g00

0

预期输出:

dcba

ecba

fba

gia

hia

dba

eba

fca

gca

#include<iostream>

using namespace std;
char path[100]; //路径数组,存储路径上每个结点的值
typedef struct BiTNode {
  char data;
  struct BiTNode * lchild, * rchild;
}
BiTNode, * BiTree;
void CreateBiTree(BiTree & T, char S[], int & i) { //先序建立二叉树
  if (S[i] == '0')
    T = NULL;
  else {
    T = new BiTNode;
    T - > data = S[i];
    CreateBiTree(T - > lchild, S, ++i);
    CreateBiTree(T - > rchild, S, ++i);
  }
}
void AllPath(BiTree T, char path[], int pathlen) { //二叉树叶子结点到根结点的路径的求解
  
  if (T) {
    if (T - > lchild == NULL && T - > rchild == NULL) {
      path[pathlen] = T - > data;
      for (int i = pathlen; i >= 0; i--)
        cout << path[i];
      cout << endl;
    } else {
      path[pathlen++] = T - > data;
      AllPath(T - > lchild, path, pathlen);
      AllPath(T - > rchild, path, pathlen);
      pathlen--;
    }
  }
}
int main() {
  char S[100];
  while (cin >> S && S[0] != '0') {
    int i = -1;
    BiTree T;
    CreateBiTree(T, S, ++i);
    int pathlen = 0; //初始化路径到根结点的长度为0
    AllPath(T, path, pathlen);
  }
  return 0;
}

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值