树--终章

一、线索二叉树

之前学习的二叉树,都是自顶向下的,仿佛有一种
开弓没有回头箭的感觉,那么是否可以回头呢?
此外,让我们来看看画图表示链式存储
在这里插入图片描述是不是发现,很多 ^ 。这些空指针被闲置了,浪费空间。
所以,我们可以用这些空着的地方,指向某些节点,开弓也有回头箭。

既然要指向某节点,就得遵循一定的规律,这里我们按照此前学习过的“中序遍历”的顺序:
右边的空余地方,统一指向按照中序遍历接下来要去往的那个节点;
左边的空域地方,也可以统一指向来之前的节点
这样可以做到来去自如
问题还没有完全解决,我们看到,其实只有叶子节点是有 ^ 的,那么也就是说,一个节点的左右两边有可能是用来“指路”的,有的是正儿八经用来指向儿子的。所以怎么判断呢?结构体内得加两个变量,以作标记。比如这个变量是1的时候就是指向儿子、0的时候就指路。
在这里插入图片描述
而代码实现的部分,就非常的灵性:
你会发现,和之前的中序遍历非常相似—没错,本质上(我认为)就是在遍历的过程中顺便加上了这些 前驱/后继

#include <bits/stdc++.h>
//双亲表示法
 
typedef enum {
	Link;
	Thread;
}PinterTag; 
 
typedef struct BiThrNode{
	int data;
	struct BiThrNode *lchild,*rchild;
	PointerTag Ltag;
	PointerTag Rtag;
}BiThrNode,*BiThrTree;
BiThrTreee pre;
void InThreading(BiThrTree p)
{
	if(p)
	{
		InThreading(p->lchild)//递归左子树线索化
		if(!p ->lchild)
		{
			p->Ltag=Thread;//前驱线索 
			p->lchild=pre;//左孩子指针指向前驱 
		}
		
		if(!pre->rchild)
		{
			p->Rtag=Thread;//后驱线索 
			p->rchild=p;//前驱右孩子指针指向后驱 即当前节点p			
		}
		pre=p;//保持pre指向p的前驱
		InThreading(p->rchild); 
	}
}

不难发现,就是在遍历的代码中间加入了一系列操作
可以想象成边遍历边穿针引线。
在这里插入图片描述

二、树、森林和二叉树的转换

1.树转换为二叉树

一棵普普通通的树肯定难搞,每个节点各有各自的儿子数,想要存储并且利用简直不可能。所以有必要转换为二叉树。
所以转化的规则如下:

  1. (除根节点)所有节点都横向,和兄弟建立连接
  2. 每个节点(除叶子)只保留与自己第一个儿子的联系
  3. 顺时针旋转,调整层次

在这里插入图片描述其中一个细节需要注意:
在这里插入图片描述

代码如下(示例):

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings('ignore')
import  ssl
ssl._create_default_https_context = ssl._create_unverified_context

2.二叉树转化为树

代码如下(示例):

data = pd.read_csv(
    'https://labfile.oss.aliyuncs.com/courses/1283/adult.data.csv')
print(data.head())

该处使用的url网络请求的数据。


总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值