(codes)二叉树的系列算法,递归与非递归

SVM实现多分类的程序基础工作(三)——基于纠错编码的SVM多类分类算法和基于二叉树的多类SVM算法的基本思想 SVM(支持向量机)最初是针对二分类问题而提出来的,但现在我们要实现多分类,那么可不可以运用SVM呢?根据目前的研究,我们有两种解决途径: 1、    通过构造多个SVM二值分类器并将让它们组合起来实现多类分类,例如one-against-rest, one-against-one和DA GSVM. 虽然这三种方法是当前最常用且性能较优的, 但one-against-rest 和on 阅读详情

// tree_li.cpp : 定义控制台应用程序的入口点。

//程序共能有:

//递归与非递归:创建树,先序、中序、后续遍历二叉树,求某一结点的所有祖先

//VC60下调试通过!

//

#include "stdafx.h"

# include <stdio.h>
# include <malloc.h>
#include <stack>
using std::stack;
# define    ERROR          -1
# define    OK             1

//--------以下用户按照具体问题设定--------------------
 typedef char TElemType;  //指定char为二叉树结点元素类型

 void visit (char e)
  {   printf ("---%c---/n",e);  }
//----------------------------------------------------

//-----------以下实现二叉树二叉链表的几个基本操作------------
typedef struct BiTNode {
     TElemType  data;
     struct BiTNode  *lchild,*rchild;
  }BiTNode, *BiTree;

void CreateBiTree(BiTree &T)
{  char ch;
   scanf  ("%c",&ch);
   if  (ch=='#')  T=NULL;
   else  {
        T=new BiTNode;
  T->data=ch;
  CreateBiTree(T->lchild);
  CreateBiTree(T->rchild);
          };
}

void CountLeaf1 (BiTree T,int & count)
{  if (T) { 
 if ((!T->lchild)&&(!T->rchild))  count++;
 CountLeaf1 (T->lchild,count);
 CountLeaf1 (T->rchild,count);
          };
}

int CountLeaf2 (BiTree T)
{
   if (!T) return 0;
   if ((!T->lchild)&&(!T->rchild)) return 1;
   return  CountLeaf2(T->lchild)+CountLeaf2(T->rchild);
}

void CountNode (BiTree T,int & count)
{
   if (T!=NULL)
   {
      count++;
   CountNode (T->lchild,count);
   CountNode (T->rchild,count);
   };
}

int CountDepth (BiTree T)
{ 
 int templ,tempr;

 if (!T) return 0;
    else
 { 
  templ=CountDepth(T->lchild);
  tempr=CountDepth(T->rchild);
  return (templ>=tempr)?templ+1:tempr+1;
 };
}

int PreOrderTraverse (BiTree T, void (*visit)(TElemType e))
{  if (T) {  visit (T->data);
          PreOrderTraverse  (T->lchild, visit);
          PreOrderTraverse  (T->rchild, visit);
            };
  return OK;
}

int InOrderTraverse (BiTree T, void (*visit)(TElemType e))
{  if (T) { InOrderTraverse  (T->lchild, visit);
           visit (T->data);             
           InOrderTraverse  (T->rchild, visit);
            };
  return OK;
}

int PostOrderTraverse (BiTree T, void (*visit)(TElemType e))
{  if (T) { PostOrderTraverse  (T->lchild, visit);
           PostOrderTraverse  (T->rchild, visit);
           visit (T->data);              
          };
  return OK;
}

void PreOrderTraverseEx(BiTree T,void (*visit)(TElemType e))
{
 stack<BiTree> s;
 BiTree p=T;
 while(p!=NULL||!s.empty())
 {
  while(p!=NULL)
  {
   visit(p->data);
   s.push(p);
   p=p->lchild;
  }
  if(!s.empty())
  {
   p=s.top();
   s.pop();
   p=p->rchild;
  }
 }
}
void InOrderTraverseEx(BiTree T,void (*visit)(TElemType e))
{
 stack<BiTree> s;
 BiTree p=T;
 while(p!=NULL||!s.empty())
 {
  while(p!=NULL)
  {
   
   s.push(p);
   p=p->lchild;
  }
  if(!s.empty())
  {
   p=s.top();
   visit(p->data);
   s.pop();
   p=p->rchild;
  }
 };
}
typedef enum{L,R}type;
typedef struct
{
 BiTree ptr;
 type tag;
}stacknode;
void PostOrderTraverseEx(BiTree T,void (*visit)(TElemType e))
{
 
 stack<stacknode> s;
 BiTree p=T;
 stacknode tmp;
 do
 {
  while(p!=NULL)
  {
   tmp.ptr=p;
   tmp.tag=L;
   s.push(tmp);
   p=p->lchild;
  }
  while(!s.empty()&&s.top().tag==R)
  {
   tmp=s.top();
   s.pop();
   
   visit(tmp.ptr->data);
  }
  if(!s.empty())
  {
   s.top().tag=R;
   p=s.top().ptr->rchild;
  }
 }while(!s.empty());
}
void TraverseAncestry(BiTree T,TElemType e,void (*visit)(TElemType e))
{
 stack<TElemType> vs;
 stack<stacknode> s;
 BiTree p=T;
 BiTree pre;
 stacknode tmp;
 do
 {
  while(p!=NULL)
  {
   tmp.ptr=p;
   tmp.tag=L;
   s.push(tmp);
   p=p->lchild;
  }
  while(!s.empty()&&s.top().tag==R)
  {
   tmp=s.top();
   s.pop();
   if(tmp.ptr->data==e)
   {
    pre=tmp.ptr;
    vs.push(e);
   }
   else if(tmp.ptr->lchild==pre||tmp.ptr->rchild==pre)
   {
    pre=tmp.ptr;
    vs.push(pre->data);
   }
//   visit(tmp.ptr->data);
  }
  if(!s.empty())
  {
   s.top().tag=R;
   p=s.top().ptr->rchild;
  }
 }while(!s.empty());
 while(!vs.empty())
 {
  visit(vs.top());
  vs.pop();
 }
}
//-------------------------------------------------
//------------以下为调用基本操作的主函数-----------
int main()
{
    BiTree T;

 int count_Node,count_Leaf;
    count_Node=0; count_Leaf=0;

 printf ("请输入二叉树的先序遍历序列(包括空子树#符号)/n");
 CreateBiTree (T);
 printf ("二叉树建立完毕/n");

/* printf ("以下是先序遍历序列/n");
    PreOrderTraverse  (T,visit);

 printf ("以下是中序遍历序列/n");
    InOrderTraverse  (T,visit);

 printf ("以下是后序遍历序列/n");
    PostOrderTraverse  (T,visit);

 printf ("以下计算节点数目/n");
    CountNode  (T,count_Node);
 printf ("%d/n",count_Node);
 
 printf ("以下计算叶子节点数目(方法1)/n");
    CountLeaf1  (T,count_Leaf);
 printf ("%d/n",count_Leaf);

 printf ("以下计算叶子节点数目(方法2)/n");
 printf ("%d/n",CountLeaf2(T));

 printf ("以下计算二叉树的深度/n");
 printf ("%d/n",CountDepth(T));
*/
 printf ("以下是先序遍历序列/n");
 PreOrderTraverseEx(T,visit);
 printf ("以下是中序遍历序列/n");
 InOrderTraverseEx(T,visit);
 printf ("非递归后续遍历二叉树(二叉排序树)/n");
 PostOrderTraverseEx(T,visit);
 printf ("输出制定节点的所有祖先,采用非递归后续遍历二叉树(二叉排序树)/n");
 TraverseAncestry(T,'b',visit);

 return 0;
}

 

基于MATLAB的莫尔斯电码二叉树与图论网络建模实践 前缀编码是数据压缩与可靠传输的基础技术,其核心原理在于通过非等长且无前缀冲突的编码方式实现信息的唯一解码。这种结构天然对应二叉树,例如赫夫曼编码,它利用树形结构高效地进行编码映射与路径搜索。在通信与网络领域,将编码系统置于多节点环境中分析时,图论提供了强大的建模工具,用于研究路径选择、网络流与传输可靠性。通过将经典莫尔斯电码这一具体实例抽象为二叉树数据结构,并进一步嵌入图模型模拟多跳通信,可以直观展示从数据结构到网络算法的完整技术链条。本项目使用MATLAB,结合其矩阵运算与图论工具箱,实现了从莫尔斯电码树 阅读详情

相关推荐

学习笔记7--激光雷达标定

本系列博客包括6个专栏,分别为:《自动驾驶技术概览》、《自动驾驶汽车平台技术基础》、《自动驾驶汽车定位技术》、《自动驾驶汽车环境感知》、《自动驾驶汽车决策与控制》、《自动驾驶系统设计及应用》,笔者不是自动驾驶领域的专家,只是一个在探索自动驾驶路上的小白,此系列丛书尚未阅读完,也是边阅读边总结边思考,欢迎各位小伙伴,各位大牛们在评论区给出建议,帮笔者这个小白挑出错误,谢谢! 此专栏是关于《自动驾驶汽车环境感知》书籍的笔记。 2.激光雷达标定 2.1 概述 激光雷达内参标定:内部激光发射器坐标系与雷达本

FUXI_Willard 8027

05-树9 Huffman Codes

In 1953, David A. Huffman published his paper "A Method for the Construction of Minimum-Redundancy Codes", and hence printed his name in the history of computer science. As a professor who gives the f...

weixin_30892889的博客 114

RL调参侠之BipedalWalker BipedalWalkerHardcore SAC

前几天用PPO训练了个很一般的agent: RL调参侠之BipedalWalker PPO 我看SpinningUp上面说PPO和SAC是两个领域里各自的State_of_the_art的方法,所以就打算跑SAC试试看,之前因为Open AI Five的原因,一直感觉PPO很牛掰,实际上现在很多自动驾驶的算法也是用PPO在跑,毕竟有一个“必定能够提升期望”的理论保证在这里,我理解这对做项目很大的诱惑。 不过我跑出来的结果明显是SAC更好。 调参侠时间 策略熵的权重alpha用的0.2,我一开始没有看SAC的

weixin_48370148的博客 2100

tech recursion <B> Recursive function to build Huffman codes 1/99

【代码】tech recursion <B> Recursive function to build Huffman codes 1/99。

weixin_44525183的博客 163

世界职业院校技能大赛财经赛道项目参考逐字稿五

世界职业院校技能大赛财经赛道项目参考逐字稿五

我是网络安全兼技能大赛工程师,专注网络安全技术学习与技能大赛实战!持续分享最新的技术文章,帮你少走弯路,一起在技术赛道上进步~ 134

YOLOv改进 | YOLOv11更换主干Backbone之MobileNetV2(轻量化主干网络结构--高效轻量移动模型)

本文提出将YOLOv11的主干网络替换为轻量化的MobileNetV2,以提升模型在移动端设备的部署效率。MobileNetV2通过倒残差结构和线性瓶颈层,显著减少了计算量和参数量(降至1M~3M),同时保持多尺度特征提取能力。实验表明,改进后的模型在移动设备上可实现20-30 FPS的实时检测,适用于手机APP、无人机和工业监控等场景。核心代码展示了倒残差块的实现,通过深度可分离卷积和通道扩展/压缩实现高效特征提取。

走向CTO的路上... 1461

比较全的树的构造以及遍历(codes)

#include #include #include using namespace std; #define N 10 //节点类 class BNode  { public:  int data;  BNode *lchild;  BNode *rchild;  BNode()  {   data=0;   lchild=NULL;   rchild=NUL

Multi-Domain 808

ubuntu 20.04 搭建多用户远程桌面共享及同时在线使用

摘要:本文介绍了在物理机上配置远程桌面访问的完整流程。通过setup_xrdp.sh脚本自动安装xrdp服务,修改配置文件并开放3389端口。同时提供了用户管理脚本:add_rdp_users.sh用于创建带sudo权限的远程用户,del_rdp_users.sh用于删除用户及主目录。还包含批量操作脚本add_rdp_all.sh和del_rdp_all.sh,支持一次性创建/删除多个用户(如dev1-dev5),所有用户密码统一设置为111111。完整方案实现了远程桌面环境的快速部署和用户集中管理。

623

Ky Codes Records

Ky Codes Records

Piink的博客 253

基于 STM32 的手持式安检金属探测器设计与实现

【代码】基于 STM32 的手持式安检金属探测器设计与实现。

weixin_42300449的博客 899

[RK3568 Android11] 开发之调试RK809 codec音频-SPK喇叭

目录 前言 一、注册声卡顺序 二、SPK喇叭路由配置 三、tinyalsa调试工具 前言 瑞芯微RK809是一种复杂的功率管理集成电路(PMIC)集成编解码器,适用于由外部电源供电的多核系统应用;同时它也集成了音频编解码器,这样在硬件设计上可以直接使用RK809 codec功能,不必再外挂个其他codec芯片;RK809 codec不仅支持SPK,还支持耳机,MIC功能; 一、注册声卡顺序 设备树dts里面原厂帮我们配置好了rk809_sound,我们直接...

~未来可期~ 7413

谈谈对系统学习计算机算法重要性的感想

通过二叉树求最大路径和的算法小问题感受到计算机科学中学会算法套路的重要性。

huanqing2010的专栏 2528

把 SM30 用顺:从表设计到权限与传输,全面掌握 SAP Table Maintenance Generator

摘要 SAP的Table Maintenance Generator(TMG)是为配置表维护需求设计的经典工具,能够生成标准化的维护对话框(SM30)。它支持单表、维护视图(多表关联)和视图簇(导航式维护)三种维护对象类型。使用TMG前需注意三个关键设置:1)表维护权限选项;2)交付类(决定数据传输行为);3)客户端字段配置。通过SE54/SE11生成维护对话框时,需选择维护类型(一步/两步)和记录例程(控制传输)。TMG生成的对象包含函数组、屏幕和处理模块,但部分标准框架不可修改。实际应用中,可通过参数事

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 176

5-9 Huffman Codes

点击打开链接 符合两个要求就可以判断该树是否满足要求 判断输入的编码是否符合要求(1、编码长度与Huffman编码长度相同 2、前缀编码) 首先想到的避免建一棵哈弗曼树,是用一个结构体node来保存学生提交的节点的编码 但估计在判断前缀编码时会超时(N #include #include #include #include #include #include #include #in

Draven__的博客 329

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

第5章 树和二叉树(8)

例5-3 编写算法,求二叉树的深度 Python Codes: class TreeNode: def __init__(self,left=0,right=0,value=0): self.Left=left self.Right=right self.Value=value class Tree: def __init__(

379

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

算法作业HW12:Leetcode94 Sum Root to Leaf Numbers

Description: Given a binary tree containing digits from 0-9 only, each root-to-leaf path could represent a number. An example is the root-to-leaf path 1->2->3 which represents the number

as841175的博客 387

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

算法作业HW11:Leetcode90 Path Sum

Description: Given a binary tree and a sum, determine if the tree has a root-to-leaf path such that adding up all the values along the path equals the given sum. Note: Given the below

as841175的博客 232

第5章 树和二叉树(10)

习题 5.10 编写算法,将二叉树中所有结点的左右子树相互交换。 C++ Codes: template class TreeNode { public: T Value; TreeNode *Left; TreeNode *Right; TreeNode(TreeNode *left=0,TreeNode *right=0,T value=0) { Value=value;

372

第5章 树和二叉树(4)

3. 后序遍历(LRD) C++ Codes: template class Tree { public: TreeNode *Root; Tree(TreeNode *root) { this->Root=root; } void LevelOrder() { Tree::LevelOrder2(this->Root); //Tree::LevelOrder1(thi

386

算法作业HW17:LeetCode101 Symmetric Tree

Description: Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center). For example, this binary tree [1,2,2,3,4,4,3] is symmetric:     Note:

as841175的博客 308

[LeetCode]Codes of Easy Problem

[LeetCode]Code of Easy Problem

Narcssus的专栏 900

第5章 树和二叉树(2)

5.2.5 二叉树的遍历 1. 先序遍历。 C++ Codes: template class Tree { public: TreeNode *Root; Tree(TreeNode *root) { this->Root=root; } void PreOrder() { Tree::PreOrder2(this->Root); //Tree::PreOrder1

388

二叉树的序列化

差不多搞了两个半小时,终于出来了,目前最大的问题是 在LeetCode上不停的调试和试错,才能得出最终答案,在敲代码的过程中会犯各种各样的毛病,而且对二叉树的序列化不是很清楚,判别条件上也总是出错,总之就是很菜 使用的是层序遍历,也就是BFS /** * Definition for a binary tree node. * public class TreeNode { * in...

qq_43641886的博客 154

LeetCode基本记录【6】// BASIC NOTES AND CODES OF LEETCODE [ 6 ]

# LeetCode基本记录【6】 93. Restore IP Addresses Given a string containing only digits, restore it by returning all possible valid IP address combinations. For example: Given “25525511135”, return [“...

VisualCortex 565

第5章 树和二叉树(7)

例5-2 统计出二叉树中叶子结点的数目 C++ Codes: template class TreeNode { public: T Value; TreeNode *Left; TreeNode *Right; TreeNode(TreeNode *left=0,TreeNode *right=0,T value=0) { Value=value; this->Left=l

451

C语言二叉树数据结构:原理、实现与应用

二叉树作为基础数据结构,通过节点与左右子树的层级关系实现非线性数据组织。其核心原理在于每个节点最多包含两个子节点,这种二分特性使其天然适合表达层级逻辑和分类关系。在技术实现上,顺序存储和链式存储两种方案各有优劣,前者适合完全二叉树,后者则更具通用性。二叉树在工程领域价值显著,广泛应用于文件系统管理、数据库索引构建以及编译器设计等场景。通过递归与非递归遍历算法,可以高效处理树形数据。在内存管理和调试技巧方面,预分配节点池和可视化打印等优化手段能有效提升开发效率。特别在表达式计算和哈夫曼编码等经典应用中,二叉树

weixin_34087307的博客 387
上一篇: (codes)a program convert a dec into a hex
下一篇: Information About The Space of MFC and C#,ASP.NET
skybstdio
博客等级 码龄20年 5粉丝 18原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值