严题集6.65//Leetcode105 已知二叉树前序序列和中序序列分别存放在两个一位数组中,建立该二叉树的二叉链表

一、问题描述

在这图片描述
注意可以假设数组中没有重复元素,这位我们判断子树是否为空时提供了便利。

二、DVC++版本

先是在DVEC++上编译的,供读者参考。
后面有LeetCode版的。

BiTree Resume_BiTree(TElemType *pre,TElemType *mid,int prelen,int midlen)
//6-65 前序序列和中序序列求出二叉树 
{
	BiTree want;
	if(! (want=(BiTree)malloc(sizeof(BiTNode)))) exit(OVERFLOW);
	if(prelen==0&&midlen==0)
	return NULL;
	want->data=pre[0];
	int rootposition=0;
	if(pre[0]==mid[0])
	want->lchild=NULL;
	else
	{
		rootposition=SearchNum(want->data,mid,midlen);
		want->lchild=Resume_BiTree(pre+1,mid,rootposition,rootposition);
	}
	if(pre[0]==mid[midlen-1])
	want->rchild=NULL;
	else
	{
		want->rchild=Resume_BiTree(pre+rootposition+1,mid+rootposition+1,prelen-rootposition-1,midlen-rootposition-1);
	}
	return want;	
} 

三、LeetCode版本

可以在LeetCode平台上直接运行。时间和空间复杂度都还不错。
在这里插入图片描述
代码如下:

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     struct TreeNode *left;
 *     struct TreeNode *right;
 * };
 */
int SearchNum(int num,int *array,int length)
{
	for(int i=0; i<length; i++)
	if(array[i] == num)
	return i;
	return -1;
	//没有找到。
}

struct TreeNode* buildTree(int* pre, int prelen, int* mid, int midlen)
{
    struct TreeNode* want;
    want=(struct TreeNode*)malloc(sizeof(struct TreeNode));
	if(prelen==0&&midlen==0)
	return NULL;
	want->val=pre[0];
	int rootposition=0;
	if(pre[0]==mid[0])
	want->left=NULL;
	else
	{
		rootposition=SearchNum(want->val,mid,midlen);
		want->left=buildTree(pre+1,rootposition,mid,rootposition);
	}
	if(pre[0]==mid[midlen-1])
	want->right=NULL;
	else
	{
		want->right=buildTree(pre+rootposition+1,prelen-rootposition-1,mid+rootposition+1,midlen-rootposition-1);
	}
	return want;	
}
在数字信号处理,高通滤波器是用于让高频信号通过,同时抑制低频信号的工具。使用Matlab设计一个具有特定通带和阻带纹波的汉宁窗高通滤波器时,首先需要确定滤波器的阶数和窗函数。以下是详细步骤和示例代码: 参考资源链接:[Matlab设计汉宁窗高通滤波器](https://wenku.csdn.net/doc/32kxse0a55) 1. 设定滤波器的关键参数:通带截止频率`Wp`、阻带截止频率`Ws`以及通带纹波`Rp`和阻带纹波`Rs`。 2. 使用`fir1`函数计算理想的高通滤波器系数,其`N`为滤波器的阶数。`N`的选择通常基于过渡带宽度和所需的纹波大小。 3. 生成汉宁窗系数,该窗用于调整滤波器的频率响应,以减小频谱泄露和旁瓣电平。 4. 将理想滤波器系数与汉宁窗相乘得到实际滤波器系数。 5. 使用`freqz`函数计算滤波器的频率响应,包括幅度响应和相位响应。 示例代码如下: ```matlab % 设定参数 Wp = 0.3; % 通带截止频率(归一化频率) Ws = 0.4; % 阻带截止频率(归一化频率) Rp = 1; % 通带最大纹波(分贝) Rs = 40; % 阻带最小衰减(分贝) N = 50; % 滤波器阶数 % 设计理想高通滤波器系数 b = fir1(N, Wp, 'high', kaiser(N+1,6.65)); % 应用汉宁窗 h = b .* hanning(N+1)'; % 计算频率响应 [H, w] = freqz(h, 1, 1024); % 绘制幅度响应 figure; plot(w/pi, 20*log10(abs(H))); xlabel('归一化频率 (\times\pi rad/sample)'); ylabel('幅度 (dB)'); title('汉宁窗高通滤波器幅度响应'); grid on; ``` 通过上述步骤,我们可以设计一个符合特定通带和阻带纹波要求的高通滤波器,并通过`plot`函数绘制出滤波器的幅度响应,以直观地验证滤波器的性能是否满足设计要求。这只是一个基础的设计过程,实际应用可能需要根据具体需求调整参数和设计方法。 参考资源链接:[Matlab设计汉宁窗高通滤波器](https://wenku.csdn.net/doc/32kxse0a55)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雨林木风11

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值