打印路径的思路:利用一个数组保存经过的结点,若该结点是叶子结点,打印数组中结点。如果不是叶子结点,那么将这个结点加入数组,递归地调用该函数,入口参数设为结点的左结点和右结点。
代码:
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);
}