7-1 还原二叉树 (25 分)
题目:
给定一棵二叉树的先序遍历序列和中序遍历序列,要求计算该二叉树的高度。
代码1:
#include<bits/stdc++.h> using namespace std; int dfs(char a[],char b[],int n){ int i; if(n==0)return 0; for(i=0;i<n;i++){ if(b[i]==a[0]){ break; } } int x=dfs(a+1,b,i)+1;//求左子树的深度 int y=dfs(a+i+1,b+i+1,n-i-1)+1;//求右子树的深度 return x>y?x:y; } int main() { char a[101]; char b[101]; int n; cin>>n; cin>>a>>b; int cnt=dfs(a,b,n); cout<<cnt<<endl; }
代码2:
#include <bits/stdc++.h> using namespace std; struct btnode { char value; btnode *lc; btnode *rc; }; char pre[55]; char pos[55]; int n; int ans=0; btnode* buildtree(char pre[],char pos[],int n,int cnt) { if(n==0) return NULL; btnode *F=new btnode; int root=pre[0]; F->value=root; int k=0; for(int i=0;i<n;i++) { if(pos[i]==root) { k=i; break; } } cnt++; F->lc=buildtree(pre+1,pos,k,cnt); if(F->lc){ ans=max(cnt,ans); } F->rc=buildtree(pre+k+1,pos+k+1,n-k-1,cnt); if(F->rc){ ans=max(cnt,ans); } return F; } int main() { cin>>n; cin>>pre; cin>>pos; // cout<<ans; btnode *F=buildtree(pre,pos,n,1); if(n==1) ans=1; cout<<ans; return 0; }
本文作者:kingwzun
本文链接:https://www.cnblogs.com/kingwz/p/15723873.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步