首先遇到的问题是,在二叉树求最短路径中,DFS参数x的传入导致的结果不同问题
#include<iostream>
#include<iomanip>
#include<cstring>
using namespace std;
int maxi;
char path[1000],ans[1000];
typedef struct BiTLnode{
char data;
struct BiTLnode *lchild,*rchild;
}BiTLnode,*Tree;
void create(Tree &T,char s[],int &i){
if(s[i]=='0') T=NULL;
else{
T=new BiTLnode;
T->data=s[i];
create(T->lchild,s,++i);
create(T->rchild,s,++i);
}
}
void DFS(Tree T,int x){
if(T){
path[x]=T->data;
if(!T->lchild&&!T->rchild)
{
if(x>maxi)
{
maxi=x;
for(int i=1;i<=x;i++)
{
ans[i]=path[i];
}
}
}
else{
DFS(T->lchild,x+1);
DFS(T->rchild,x+1);
}
}
}
void pre(Tree T){
if(T){
cout<<T->data;
pre(T->lchild);
pre(T->rchild);
}
}
int main(){
char s[1000];
Tree T;
while(cin>>s&&s[0]!='0'){
int x=0;
int i=-1;
create(T,s,++i);
DFS(T,x+1);
cout<<maxi<<endl;
for(int i=1;i<=maxi;i++){
cout<<ans[i];
}
cout<<endl;
maxi=1;
}
return 0;
}
- 当x参数设置为x+1,答案为:
- 当x参数设置为x++,答案为:
- 当x参数设置为++x,答案为:
- 结论:在传参数的时候要注意,++x和x++是会改变当前x的数值的,而x+1不会改变x的数值,由于DFS需要回退查询,所以一旦改变x的值,回退表示层数的x将无法生效,所以在主函数中传参无论是++x还是x+1都可以,但是在局部函数传参也就是实现DFS时必须是x+1。