2010 866数据结构 算法设计题——链表,二叉树
1、查找有序链表
核心find
init建链表 output输出当前链表
#include <bits/stdc++.h>
using namespace std;
typedef struct Node{int data;struct Node* next;
}Node,*LinkList;
LinkList init(){int n;cin>>n;Node *L=(Node*)malloc(sizeof(Node));L->data=-1000;L->next=NULL;Node *p=L;for (int i=1;i<=n;i++){int x;cin>>x;Node *res=(Node*)malloc(sizeof(Node));res->data=x;res->next=NULL;p->next=res;p=p->next;}return L;
}
void output(LinkList L){Node* p=L->next;while (p!=NULL){cout<<p->data<<" ";p=p->next;}
}
bool find(LinkList L,int x){Node* p=L;while (p->next!=NULL&&p->next->data<=x){p=p->next;if (p->data==x){return true;}}Node* res=(Node*)malloc(sizeof(Node));res->data=x;res->next=p->next;p->next=res;return false;
}
int main(){LinkList L=init();int x;cin>>x;cout<<find(L,x)<<"\n";output(L);return 0;
}
2、
核心dfs init为建树
#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;cin>>ls>>rs;if (ls>0){pos[i]->left=pos[ls];}if (rs>0){pos[i]->right=pos[rs];}}return pos[1];
}
bool dfs(TreeNode* p){if (p->left!=NULL&&p->right!=NULL){return dfs(p->left)||dfs(p->right);}else if (p->left==NULL&&p->right==NULL){return false;}else{return true;}
}
int main(){TreeNode* rt=init();cout<<dfs(rt);return 0;
}