对于大多数树的问题,用递归是个很好的方法。
void printAllRoadsOfBtree(node* root,queue<char>& q) {
if (!root) {
return;
}
//此时为叶子节点 递归出口 打印路径即可
if (!root->lchild && !root->rchild) {
//切记加上叶子节点的data
q.push(root->data);
//打印路径
while (q.size()) {
cout << q.front() << ",";
q.pop();
}
cout<<endl << "-----------------------------------" << endl;
return;
}
if (root) {
q.push(root->data);
//如果左右子树都不为空 则递归调用左右子树
if (root->lchild && root->rchild) {
//克隆一个一模一样的路径队列
queue<char>q2(q);
printAllRoadsOfBtree(root->lchild, q);
printAllRoadsOfBtree(root->rchild, q2);
}
//左子树或者右子树为空 则只需要递归一边即可
else if (root->lchild && !root->rchild) {
printAllRoadsOfBtree(root->lchild, q);
}
else {
printAllRoadsOfBtree(root->rchild, q);
}
}
}