打印二叉树根结点到所有叶子结点的路径

来源:互联网 发布:限制局域网p2p软件 编辑:程序博客网 时间:2024/04/28 05:46

        打印路径的思路:利用一个数组保存经过的结点,若该结点是叶子结点,打印数组中结点。如果不是叶子结点,那么将这个结点加入数组,递归地调用该函数,入口参数设为结点的左结点和右结点。

代码:

void printArray(int  arr[],int len){cout<<char(arr[0]);for(int i = 1; i < len; i++){/* conversion or not to char */cout<<"->"<<char(arr[i]);}cout<<endl;}void printPathsRecur(BinTree T, int path[],int pathLen){if(T == NULL)return;/* append current node to the path array */path[pathLen] = T->data;pathLen++;/* it's a leaf , so print the path that lead to it */if(T->lchild == NULL && T->rchild == NULL){printArray(path,pathLen);}else{/*otherwise try both trees*/printPathsRecur(T->lchild,path,pathLen);printPathsRecur(T->rchild,path,pathLen);}} void printPaths(BinTree T){int path[1000];printPathsRecur(T,path,0);}
测试结果:

       A         C       B       F   E   DPaths : A->C->FA->B->EA->B->D
               A                     C               B                                 D                               EPaths : A->CA->B->D->E


REF:

1,http://cslibrary.stanford.edu/110/BinaryTrees.html#csoln

2,http://blog.csdn.net/randyjiawenjie/article/details/6772145


0 0