二叉树的序列化---广义表

server/2024/9/24 10:16:01/

前言

个人小记


一、代码

#include<stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#define key(n) (n)?(n->key):(-1)
#define MAX_NODE 10typedef struct Node
{int key;struct Node* lchild,*rchild;
}Node;Node* init_node(int key)
{Node* node=(Node* )malloc(sizeof(Node));node->key=key;node->lchild=node->rchild=NULL;return node;
}Node* insert(Node* root,int key)
{if(root==NULL)return init_node(key);if(rand()%2)root->lchild=insert(root->lchild,key);else root->rchild=insert(root->rchild,key);return root;
}Node* get_tree(int n)
{Node* root=NULL;for(int i=0;i<n;i++){root=insert(root,rand()%100);}return root;
}void clear(Node* root)
{if(root==NULL)return ;clear(root->lchild);clear(root->rchild);free(root);return ;
}void print(Node* root)
{if(root==NULL)return ;printf("%d(%d,%d)\n",key(root),key(root->lchild),key(root->rchild));print(root->lchild);print(root->rchild);return ;
}char buff[1000];
int len;void __serial(Node* root)
{if(root==NULL)return ;len+=snprintf(buff+len,100,"%d",root->key);if(root->lchild==NULL&&root->rchild==NULL)return ;len+=snprintf(buff+len,100,"(");__serial(root->lchild);if(root->rchild){len+=snprintf(buff+len,100,",");__serial(root->rchild);}len+=snprintf(buff+len,100,")");return ;
}void serial(Node* root)
{memset(buff,0,sizeof(buff));len=0;__serial(root);return ;
}int main()
{srand((unsigned)time(0));Node* root=get_tree(MAX_NODE);printf("先序遍历每个节点的信息:\n");print(root);serial(root);printf("广义表序列化:%s\n",buff);clear(root);return 0;
}

二、测试结果

先序遍历每个节点的信息:
93(70,52)
70(-1,38)
38(-1,79)
79(58,-1)
58(-1,-1)
52(23,94)
23(67,-1)
67(68,-1)
68(-1,-1)
94(-1,-1)
广义表序列化:93(70(,38(,79(58))),52(23(67(68)),94))

http://www.ppmy.cn/server/42907.html

相关文章

常见的cdn运维面试题及答案

1、请简要介绍一下CDN的基本原理和作用。 CDN&#xff08;Content Delivery Network&#xff0c;内容分发网络&#xff09;是一种分布式网络服务&#xff0c;通过在地理位置分布广泛的节点上缓存网站静态资源&#xff08;如图片、视频、CSS、JS等&#xff09;&#xff0c;使用…

设计模式--备忘录模式

备忘录模式是一种行为设计模式&#xff0c;它用于在不破坏封装的前提下&#xff0c;保存一个对象的内部状态&#xff0c;以便以后可以恢复到这个状态。这种模式在许多应用场景中非常有用&#xff0c;例如在实现撤销操作、保存游戏进度、恢复文件备份以及保持工作状态等。 备忘…

炫酷gdb

在VS里面调试很方便对吧&#xff1f;&#xff08;F5直接调试&#xff0c;F10逐过程调试--不进函数&#xff0c;F11逐语句调试--进函数&#xff0c;F9创建断点&#xff09;&#xff0c;那在Linux中怎么调试呢&#xff1f; 我们需要用到一个工具&#xff1a;gdb 我们知道VS中程…

IPIDEA与您分享:代理IP究竟是如何保护用户隐私的?

在信息化、网络化的今天&#xff0c;互联网已成为人们生活中不可或缺的一部分。无论是日常沟通、学习工作&#xff0c;还是娱乐休闲&#xff0c;网络都扮演着举足轻重的角色。然而&#xff0c;随着网络活动的增加&#xff0c;网络安全问题也日益凸显&#xff0c;为了保护个人隐…

520节日特别篇:构建浪漫互动网站实战技巧

520节日特别篇&#xff1a;构建浪漫互动网站实战技巧 一、非零分积分资源概览二、基础概念与作用说明HTML5 Canvas & SVGCSS3 动画与过渡JavaScript 动态交互 三、实战代码示例&#xff1a;打造浪漫爱心雨HTML 结构CSS 样式JavaScript 逻辑 四、实际开发应用思路1. 个性化祝…

SK6812-RGBW是一个集控制电路与发光电路于一体的智能外控LED光源

产品概述: SK6812-RGBW是一个集控制电路与发光电路于一体的智能外控LED光源。其外型与一个5050LED灯珠相同&#xff0c;每个元件即为一个像素点。像素点内部包含了智能数字接口数据锁存信号整形放大驱动电路&#xff0c;电源稳压电路&#xff0c;内置恒流电路&#xff0…

力扣:15. 三数之和

15. 三数之和 给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k &#xff0c;同时还满足 nums[i] nums[j] nums[k] 0 。请 你返回所有和为 0 且不重复的三元组。 注意&#xff1a;答案中不可以包含重复的三…

【数据结构】【C语言】堆~动画超详细解读!

目录 1 什么是堆1.1 堆的逻辑结构和物理结构1.2 堆的访问1.3 堆为什么物理结构上要用数组?1.4 堆数据上的特点 2 堆的实现2.1 堆类型定义2.2 需要实现的接口2.3 初始化堆2.4 销毁堆2.5 堆判空2.6 交换函数2.7 向上调整(小堆)2.8 向下调整(小堆)2.9 堆插入2.10 堆删除2.11 //堆…