1340:扩展二叉树
#include<bits/stdc++.h>
using namespace std;
struct node{
char ch;
node *lchild;
node *rchild;
};
string s;
int i=-1;
node *build(){
i++;
node *rt=new node;
if(s[i]!='.'){
rt->ch=s[i];
rt->lchild=build();
rt->rchild=build();
}else return NULL;
return rt;
}
void printInorder(node *rt){
if(rt==NULL) return;
else{
printInorder(rt->lchild);
cout<<rt->ch;
printInorder(rt->rchild);
}
}
void printPostOrder(node *rt){
if(rt==NULL) return;
else{
printPostOrder(rt->lchild);
printPostOrder(rt->rchild);
cout<<rt->ch;
}
}
int main(){
cin>>s;
node* root=build();
node *tmp=root;
printInorder(tmp);
cout<<endl;
tmp=root;
printPostOrder(tmp);
cout<<endl;
return 0;
}
1339:求后序遍历
#include<bits/stdc++.h>
using namespace std;
string pre,in;
void getAns(int l1,int r1,int l2,int r2){
if(l1>r1||l2>r2) return;
int t=l2;
while(pre[l1]!=in[t]) t++;
getAns(l1+1,r1+t-l2,l2,t-1);//左子树
getAns(l1+1+t-l2,r1,t+1,r2);//右子树
cout<<pre[l1];
}
int main(){
cin>>pre>>in;
getAns(0,pre.size()-1,0,in.size()-1);
return 0;
}
110. 平衡二叉树
注意:
并不是树根的左右子树高度相差<=1就好了,如图所示。一定是要每一个结点的左右子树高度相差<=1。
代码一:cv题解。
对每个结点进行判断(递归求左右子树的高度,看看它的左右子树高度是否相差在1以内),并对当前节点的左右子节点进行判断(判断左右子节点各自的子树高度差是否在1