程序填空题:求二叉树中最大和的路径(递归法)
求二叉树中最大和的路径。如下图中最大和路径为5 4 6。
![QQ截图20210225175644.png](~/85337466-28ce-4b3c-938b-d7249f9651e7.png)
```c++
#include
#include
#include
#define N 100
using namespace std;
typedef struct BiNode{
char data;
struct BiNode *lchild,*rchild;
}BiTNode,*BiTree;
int maxsum=0;
vector maxpath;
void CreateBiTree(BiTree &T,char a[],int &i){
char ch;
ch=a[i++];
if(ch=='#') T=NULL;
else{
T=new BiTNode;
T->data=ch;
CreateBiTree(T->lchild,a,i);
CreateBiTree(T->rchild,a,i);
}
}
void findmaxpath(BiTree T,vectorapath,int asum){
if(@@[T==NULL](1))
return;
apath.push_back(T->data);
asum+=atoi(&T->data);
if(@@[T->lchild==NULL&&T->rchild==NULL](2))
{
if(asum>maxsum){
maxsum=asum;
maxpath.clear();
maxpath=apath;
}
}
@@[findmaxpath(T->lchild,apath,asum)](2);
@@[findmaxpath(T->rchild,apath,asum)](2);
}
int main(){
BiTree T;
int i=0;
char a[N];
vectorapath;
int asum=0;
cin>>a;
CreateBiTree(T,a,i);
findmaxpath(T,apath,asum);
for(int i=0;i cout< return 0;
}
```
### 输入样例:
输入一行字符序列先序递归构建二叉树。每个结点数据对应单个数字字符,#表示空结点。
```in
52#3##41##6##
```
### 输出样例:
输入从根到叶子结点路径和最大的一条路径。
```out
5 4 6
```
答案:
第1空:T==NULL
第2空:T->lchild==NULL&&T->rchild==NULL
第3空:findmaxpath(T->lchild,apath,asum)
第4空:findmaxpath(T->rchild,apath,asum)
![QQ截图20210225175644.png](~/85337466-28ce-4b3c-938b-d7249f9651e7.png)
```c++
#include
#include
#include
#define N 100
using namespace std;
typedef struct BiNode{
char data;
struct BiNode *lchild,*rchild;
}BiTNode,*BiTree;
int maxsum=0;
vector
void CreateBiTree(BiTree &T,char a[],int &i){
char ch;
ch=a[i++];
if(ch=='#') T=NULL;
else{
T=new BiTNode;
T->data=ch;
CreateBiTree(T->lchild,a,i);
CreateBiTree(T->rchild,a,i);
}
}
void findmaxpath(BiTree T,vector
if(@@[T==NULL](1))
return;
apath.push_back(T->data);
asum+=atoi(&T->data);
if(@@[T->lchild==NULL&&T->rchild==NULL](2))
{
if(asum>maxsum){
maxsum=asum;
maxpath.clear();
maxpath=apath;
}
}
@@[findmaxpath(T->lchild,apath,asum)](2);
@@[findmaxpath(T->rchild,apath,asum)](2);
}
int main(){
BiTree T;
int i=0;
char a[N];
vector
int asum=0;
cin>>a;
CreateBiTree(T,a,i);
findmaxpath(T,apath,asum);
for(int i=0;i
}
```
### 输入样例:
输入一行字符序列先序递归构建二叉树。每个结点数据对应单个数字字符,#表示空结点。
```in
52#3##41##6##
```
### 输出样例:
输入从根到叶子结点路径和最大的一条路径。
```out
5 4 6
```
答案:
第1空:T==NULL
第2空:T->lchild==NULL&&T->rchild==NULL
第3空:findmaxpath(T->lchild,apath,asum)
第4空:findmaxpath(T->rchild,apath,asum)