求根结点到指定结点的路径

来源:互联网 发布:淘宝营销手段 编辑:程序博客网 时间:2024/04/27 17:00

Description

二叉树采用二叉链表存储结构进行存储,需要输出从二叉树的树根到指定结点的完整路径。按照给出的先序序列根据教材中算法6.4所示的算法建立二叉链表。二叉树中每个结点的数据都不相同。

Input

包含多组测试数据。
每组测试数据的第一行给出二叉树的先序遍历序列(结点数至少1个,不超过100个),用于建立二叉链表存储的二叉树。
第二行一个整数m,表示有m个结点需要输出从根节点到它自己的路径。
接下来m行,每行一个字符c,表示需要输出从根节点到本结点的路径。

Output

每组数据输出m行,每行为一个从根节点到对应结点之间的路径。

Sample Input 

ABC^^DE^G^^F^^^
3
A
D
G

Sample Output

A
ABD
ABDEG

分析:首先要建立一个二叉树吧,然后慢慢的找= =。从根结点粗发,用一个容器vector把找过的点放进去,找到了就输出返回,没找到再依次寻找左右子树~

参考代码:
#include<cstdio>#include<cstdlib>#include<cmath>#include<cstring>#include<string>#include<algorithm>#include<stack>#include<queue>#include<map>#include<vector>#include<iostream> using namespace std;typedef struct BiTNode{    char d;    struct BiTNode *l;    struct BiTNode *r;}*BiTree,BiTreeNode;char ch;bool flag; void CreateBiTree( BiTree &T){    char tmp;    if( flag)        scanf("%c",&tmp);    else    {        tmp = ch;        flag = true;    }     if( tmp == '^')        T = NULL;    else    {        T = new BiTreeNode;        T->d = tmp;        CreateBiTree( T->l);        CreateBiTree( T->r);    } } void findpath( BiTree &T, char x, vector<int> &v){    if( T == NULL)        return;    v.push_back( T->d);    if( T->d == x)    {        flag = 1;        for( int i = 0; i < v.size(); i++)            putchar(v[i]);        putchar(10);        return;    }    findpath( T->l, x, v);    findpath( T->r, x, v);    v.pop_back(); } int main(){    while( ~scanf("%c",&ch))    {        if( ch == '\n')            continue;        BiTree T = NULL;        flag = false;        CreateBiTree( T);         int n;        scanf("%d",&n);        char x;        for( int i = 1; i <= n; i++)        {            scanf(" %c",&x);            vector<int> v;            findpath( T,x,v);            //putchar(10);        }     }     return 0;}




1 0
原创粉丝点击