这样求二叉树的深度是否合理?

csdn5211 2006-12-21 09:17:30
用先序非递归遍历,设置一个变量,每次进栈时加一,出栈时减一,如果当前访问节点是叶子节点,就把这个变量记录下来。最后求所有记录下来的最大值。
...全文
381 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
cjq87 2006-12-21
  • 打赏
  • 举报
回复
//栈的函数写的不是很好
//退栈的时候隐含了depth--
#include <stdio.h>
#include <malloc.h>
#define M 10 /* 假设二叉树最多的层数 */
typedef struct BiTNode
{
char data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
typedef struct Stack
{
char data;
BiTree * top;
BiTree * base;
}Stack;
void InitStack(Stack &S)
{
S.base=(BiTree *)malloc(sizeof(BiTree)*M);
S.top=S.base;
}
void push(Stack &S,BiTree p)
{
*S.top=p;
S.top++;
}
void pop(Stack &S,BiTree &p)
{
S.top--;
p=*S.top;
}
int StackEmpty(Stack S)
{
if(S.base==S.top)
return 1;
else
return 0;
}
void CreateBiTree(BiTree &T) /* 按先序序列建立一个二叉树 */
{
char c;
scanf("%c",&c);
if (c=='#')
T=NULL;
else
{
if (T)
{
T = (BiTNode *)malloc(sizeof(BiTNode));
T->data = c; /* 生成根结点 */
CreateBiTree(T->lchild); /* 构造左子树 */
CreateBiTree(T->rchild); /* 构造右子树 */
}
}
}

int DepthTree(BiTree &T)
{
BiTree p;
int depth, max;
Stack S;
InitStack(S);
p=T;
depth=max=0;
while(p||!StackEmpty(S))
{
if(p)
{
push(S,p);
p=p->lchild;
depth++;
if(max<depth)
max=depth;
}
else
{
pop(S,p);
p=p->rchild;
}
}
return max;
}
void main()
{
BiTree T;
printf("Please input(end with \"#\"):\n");
CreateBiTree(T);
printf("The depth of the tree is:");
printf("%d\n",DepthTree(T));
}
cjq87 2006-12-21
  • 打赏
  • 举报
回复
是合理的
我以前用这种方法编过这个程序
内容概要:本文围绕电力系统在负荷发生突变情形下的三相状态估计问题,深入研究了基于无迹卡尔曼滤波(UKF)和自适应无迹卡尔曼滤波(AUKF)的非线性状态估计算法。通过Matlab代码实现,构建了适用于动态负荷扰动场景的仿真模型,系统对比了UKF与AUKF在非线性、非高斯环境下的状态估计性能。研究表明,AUKF通过实时自适应调整过程噪声与观测噪声的协方差矩阵,显著提升了滤波器对突变工况的跟踪能力与鲁棒性,有效降低了估计偏差与均方根误差,在负荷突变条件下展现出更优的动态响应特性和估计精度。该方法为现代电力系统在高比例可再生能源接入、负荷波动剧烈等复杂运行环境下的实时状态感知提供了可靠的技术支撑。; 适合人群:具备电力系统分析、现代控制理论及状态估计基础知识,熟悉Matlab/Simulink仿真工具,从事电力系统运行与控制、智能电网、状态估计算法研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①应用于含高比例新能源、电动汽车等导致负荷剧烈波动的现代主动配电网状态估计;②提升配电管理系统(DMS)在非平稳、突发扰动工况下的态势感知与预警能力;③为故障诊断、系统恢复、优化调度等高级应用提供高精度、高鲁棒性的实时状态输入数据。; 阅读建议:建议读者结合提供的Matlab代码深入理解UKF与AUKF的算法实现流程,重点剖析AUKF中噪声协方差的自适应更新机制与收敛判据设计,并通过设置不同类型的负荷突变场景(如阶跃、脉冲、斜坡变化)进行仿真对比,全面评估两种算法的性能差异与适用边界,进而掌握其在实际工程中的优化配置方法。
源码直接下载地址: https://pan.quark.cn/s/a4b39357ea24 ### fmincon函数仿真实例 ### #### 一、概述 在数学优化领域,特别是在处理非线性规划问题时,`fmincon` 函数是MATLAB(注:正确的拼写应为MATLAB而非MATAB)非线性优化工具箱中的一个关键组成部分。该函数能够有效解决含有约束条件的非线性最小化问题。对于实际操作中的复杂情形,`fmincon` 提供了一种既高效又灵活的解决方案。 #### 二、fmincon函数简介 `fmincon` 是一个在MATLAB中用于解带有不等式约束、等式约束以及边界约束的非线性最小化问题的函数。其基本调用格式如下: ```matlab [x, fval] = fmincon(fun, x0, A, b, Aeq, beq, lb, ub, nonlcon) ``` - `fun` 指代目标函数的句柄。 - `x0` 代表初始估计点。 - `A` 和 `b` 分别指代线性不等式约束的矩阵和向量,用以满足 `A*x ≤ b` 的关系。 - `Aeq` 和 `beq` 分别指代线性等式约束的矩阵和向量,用以满足 `Aeq*x = beq` 的关系。 - `lb` 和 `ub` 指示变量的下界和上界。 - `nonlcon` 是一个函数句柄,用于指定非线性约束条件。 #### 三、实例解析 依据题目所提供的部分内容,我们可以详细阐释如何运用 `fmincon` 来解决问题。 ##### 3.1 目标函数定义 定义了一个名为 `fun_fmincon` 的函数,该函数用于计算目标函数值。具体代码如下: ```matlab function f = fun_fminc...

33,025

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧