关闭

SecondSearchOptionalTree

58人阅读 评论(0) 收藏 举报
分类:
#define N 9
#include<stdio.h>
#include<stdlib.h>
#include<stack>
struct ElemType{
	char key;
	int weight;
};
struct SSTable{
	ElemType *elem;
	int length;
};
typedef struct BiTNode{
	ElemType e;
	BiTNode* lchild;
	BiTNode* rchild;
}*SOSTree;
void CreateSSTable(SSTable &st,ElemType R[],int len){
	st.elem=(ElemType*)malloc(sizeof(ElemType)*(len+1));
	if(!st.elem){
		printf("内存分配失败\n");
		return;
	}
	st.length=len;
	for(int i=1;i<=len;i++)
		st.elem[i]=R[i-1];
}
void findSW(int sw[],SSTable st){
	sw[0]=0;
	for(int i=1;i<=st.length;i++)
		sw[i]=sw[i-1]+st.elem[i].weight;
}
bool Search(SOSTree T,int key){
	if(T==NULL)
		return false;
	while(T){
		if(T->e.key==key)
		{
			printf("%3c%3d\n",T->e.key,T->e.weight);
			return true;

		}
		if(T->e.key>key)
			T=T->lchild;
		else 
			T=T->rchild;
	}
	return false;
}
void SecondOptional(SOSTree &T,ElemType elem[],int sw[],int low,int high){
	int i=low;
	int min=abs(sw[high]-sw[low]);
	int dw=sw[high]+sw[low-1];
	for(int j=low+1;j<=high;j++){
		if(abs(dw-sw[j]-sw[j-1])<min){
			i=j;
			min=dw-sw[j]-sw[j-1];
		}
	}
	T=(BiTNode*)malloc(sizeof(BiTNode));
	T->e=elem[i];
	if(i==low)
		T->lchild=NULL;
	else SecondOptional(T->lchild,elem,sw,low,i-1);
	if(i==high)
		T->rchild=NULL;
	else SecondOptional(T->rchild,elem,sw,i+1,high);
}
void CreateSOSTable(SOSTree &T,SSTable st){
	int sw[N+1];
	if(st.length==0)
		T=NULL;
	else{
		findSW(sw,st);
		SecondOptional(T,st.elem,sw,1,st.length);
	}
}
void PreOrderTraverse(SOSTree T){
	std::stack<SOSTree> stack;
	while(T||!stack.empty()){
		if(T){
			printf("%3c%3d",T->e.key,T->e.weight);
			stack.push(T);
			T=T->lchild;
		}
		else{
			T=stack.top();
			stack.pop();
			T=T->rchild;
		}
	}
}
void main(){
	SSTable st={NULL,0};
	SOSTree T=NULL;
	char s;
	ElemType R[N]={{'A',1},{'B',1},{'C',2},{'D',5},{'E',3},{'F',4},{'G',4},{'H',3},{'I',5}};
	CreateSSTable(st,R,N);
	CreateSOSTable(T,st);
	PreOrderTraverse(T);
	printf("\n请输入要查找的元素\n");
	scanf("%c",&s);
	bool flag=Search(T,s);
	if(!flag) printf("查找关键字不存在");
}

0
0

  相关文章推荐
猜你在找
【直播】机器学习&数据挖掘7周实训--韦玮
【套餐】系统集成项目管理工程师顺利通关--徐朋
【直播】3小时掌握Docker最佳实战-徐西宁
【套餐】机器学习系列套餐(算法+实战)--唐宇迪
【直播】计算机视觉原理及实战--屈教授
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之矩阵--黄博士
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之凸优化--马博士
【套餐】Javascript 设计模式实战--曾亮
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:46167次
    • 积分:1515
    • 等级:
    • 排名:千里之外
    • 原创:100篇
    • 转载:74篇
    • 译文:0篇
    • 评论:2条
    最新评论