当前位置: 首页 > news >正文

2011 866数据结构 算法设计——二叉树,队列,二叉排序树

二叉树查找节点dfs

#include <bits/stdc++.h>
using namespace std;
typedef struct TreeNode{int data;struct TreeNode *left,*right;
}TreeNode;
TreeNode* init(){int n;cin>>n;vector<TreeNode*> pos(n+1);for (int i=1;i<=n;i++){TreeNode *res=(TreeNode*)malloc(sizeof(TreeNode));res->data=i;res->left=res->right=NULL;pos[i]=res;}for (int i=1;i<=n;i++){int ls,rs,val;cin>>val>>ls>>rs;pos[i]->data=val;if (ls>0){pos[i]->left=pos[ls];}if (rs>0){pos[i]->right=pos[rs];}}return pos[1];
}
bool dfs(TreeNode* rt,int key,int length){if (rt==NULL||length<0) return false;if (length==0&&rt->data==key) return true;return dfs(rt->left,key,length-1)|dfs(rt->right,key,length-1);
}
int main(){TreeNode* rt=init();int key,length;cin>>key>>length;cout<<dfs(rt,key,length)<<"\n";return 0;  
}

循环链表模拟队列

#include <bits/stdc++.h>
using namespace std;
typedef struct Node{int data;struct Node *next;
}Node,*LinkList;
void output(LinkList L){Node* p=L->next->next;while (p!=L->next){cout<<p->data<<" ";p=p->next;}cout<<"\n";
}
//带头节点 Q为尾指针
void push(LinkList &Q,int x){Node* res=(Node*)malloc(sizeof(Node));res->data=x;res->next=Q->next;Q->next=res;Q=res;
}
bool pop(LinkList &Q,int &x){if (Q->next==Q) return false;Node* p=Q->next;x=p->next->data;p->next=p->next->next;if (p->next==p){Q=p;}return true;
}
int main(){LinkList Q=(Node*)malloc(sizeof(Node));Q->next=Q;int m;cin>>m;for (int i=1;i<=m;i++){int opt,x;cin>>opt;if (opt==1){cin>>x;push(Q,x);cout<<x<<" push:";output(Q);}else{pop(Q,x);cout<<x<<" pop:";output(Q);}}return 0;  
}

二叉排序树的判定
1.dfs中序遍历/栈模拟递归 记录前缀(全局变量或指针传递,以下为指针传递)

#include <bits/stdc++.h>
using namespace std;
typedef struct TreeNode{int data;struct TreeNode *left,*right;
}TreeNode;
TreeNode* init(){int n;cin>>n;vector<TreeNode*> pos(n+1);for (int i=1;i<=n;i++){TreeNode *res=(TreeNode*)malloc(sizeof(TreeNode));res->data=i;res->left=res->right=NULL;pos[i]=res;}for (int i=1;i<=n;i++){int val,ls,rs;cin>>val>>ls>>rs;pos[i]->data=val;if (ls>0){pos[i]->left=pos[ls];}if (rs>0){pos[i]->right=pos[rs];}}return pos[1];
}
const int inf=1e9;
bool dfs(TreeNode *rt,int &pre){if (rt==NULL)return true;if (!dfs(rt->left,pre)||pre>rt->data){return false;}pre=rt->data;return dfs(rt->right,pre);
}
int main(){TreeNode* rt=init();int x=-inf;cout<<dfs(rt,x);return 0;
}

2.树上dp维护子树最大最小值

#include <bits/stdc++.h>
using namespace std;
typedef struct TreeNode{int data;struct TreeNode *left,*right;
}TreeNode;
TreeNode* init(){int n;cin>>n;vector<TreeNode*> pos(n+1);for (int i=1;i<=n;i++){TreeNode *res=(TreeNode*)malloc(sizeof(TreeNode));res->data=i;res->left=res->right=NULL;pos[i]=res;}for (int i=1;i<=n;i++){int val,ls,rs;cin>>val>>ls>>rs;pos[i]->data=val;if (ls>0){pos[i]->left=pos[ls];}if (rs>0){pos[i]->right=pos[rs];}}return pos[1];
}
struct sz{bool flag;int maxn,minn;
};
sz chsum(sz x,sz y){x.flag&=y.flag;x.maxn=max(x.maxn,y.maxn);x.minn=min(x.minn,y.minn);return x;
}
const int inf=1e9+1;
sz dfs(TreeNode *rt){if (rt==NULL)return sz{1,-inf,inf};sz resl=dfs(rt->left),resr=dfs(rt->right),res;res=chsum(resl,resr);res.minn=min(res.minn,rt->data);res.maxn=max(res.maxn,rt->data);if (rt->data<resl.maxn||rt->data>=resr.minn){res.flag=0;}return res;
}
int main(){TreeNode* rt=init();cout<<dfs(rt).flag;return 0;
}
http://www.dtcms.com/a/479929.html

相关文章:

  • 长沙大型网站建设做网站怎么样才能排在首页
  • cesium获取当前窗口和相机高度
  • 西安网站建设培训学校flash网站代码
  • 石家庄电子商务网站建设深圳电器公司排名
  • 泰州模板自助建站华为应用商店下载
  • 医程通 网站做的太徐州做网站管理的公司
  • 四川住房城乡建设周刊网站文字转码unicode
  • 贵阳建设公司网站wordpress怎么搜索博客
  • Kubernetes资源管理与yaml文件详解
  • 常规的偏振镜头有哪些类型?能做什么?
  • 最长连续序列(Longest Consecutive Sequence)
  • 南宁建设信息网站单网页网站制作
  • 国网商旅云网站地址做网站文案用哪个软件
  • 产品做推广一般上什么网站网站建设php有哪些
  • 做装饰工程的在什么网站投标手机能用的网站
  • 血玥珏-文本段落处理器 1.0.0.1
  • 数据库自增 ID 耗尽?4 个落地级方案,从新表到老系统全覆盖
  • wordpress 手机端打开速度慢seo服务公司深圳
  • python线程间怎么通信
  • 重庆有名的网站建设商城网站建设课设
  • 网站建设招标需求wordpress卡死了
  • 昆明公司建设网站永久免费网站建商城
  • sql练习-4
  • 网站都是用什么编写的系统开发文档
  • 做网站建设的windows优化大师的特点
  • win8风格 网站模板可以做业务推广的网站有哪些
  • 安吉网站设计自己怎么制作logo图标
  • 深圳专业做网站排名哪家好家乡网页设计教程
  • 专业手机网站公司哪家好学校网站建设源代码
  • AI 超级智能体全栈项目阶段五:RAG 四大流程详解、最佳实践与调优(基于 Spring AI 实现)