IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 线索二叉树--中序遍历算法 -> 正文阅读

[数据结构与算法]线索二叉树--中序遍历算法

//还有求任意结点的的后继结点与前驱结点的函数以及遍历的函数,明天再更新
#include<stdio.h>
#include<stdlib.h>
typedef struct btnode {
	char element;
	int RTag ; 
	int LTag ;
	struct btnode* Lchild, * Rchild;
}BTNode;
typedef struct btree {
	struct btnode* Root;
}BTree;
//创建新节点
BTNode* NewNode() {
	BTNode* p = (BTNode*)malloc(sizeof(BTNode));
	p->LTag = p->RTag = 0;
	return p;
}
//创建二叉树
void CreateBT(BTree* bt) {
	bt->Root = NULL;
}
//将两个二叉树组建为一个二叉树
void MakeBT(BTree* bt, char x, BTree* lt, BTree* rt) {
	BTNode* p = NewNode();
	p->element = x;
	p->Rchild = rt->Root;
	p->Lchild = lt->Root;
	lt->Root = rt->Root = NULL;
	bt->Root = p;
}


void Visit(BTNode* p) {
	printf("%c ", p->element);
}
//构造中序线索二叉树  为被调函数
void MakeThread(BTNode * t, BTNode** ppr) {
	if (t) {
		MakeThread(t->Lchild, ppr);
		if (*ppr) {
			if (!(*ppr)->Rchild) {
				(*ppr)->RTag = 1;
				(*ppr)->Rchild = t;
			}
			else {
				(*ppr)->RTag = 0;
			}
		}
		if (!t->Lchild) {
			t->LTag = 1;
			t->Lchild = *ppr;
		}
		else {
			t->LTag = 0;
		}
		*ppr = t;
		MakeThread(t->Rchild, ppr);
	}
}
//调用 构造中序线索二叉树 的函数,为调用函数
void BuildThreadBT(BTree bt) {
	BTNode* pr = NULL;
	if (bt.Root) {
		pr = NULL;
		MakeThread(bt.Root, &pr);
		pr->RTag = 1;
	}
}
//返回中序线索二叉树的第一个结点
BTNode* GetFirstNode(BTree bt) {
	BTNode* p = bt.Root;
	if (p) {
		while (p->Lchild) {
			p = p->Lchild;
		}
	}
	return p;
}
//返回任一节点的后继结点
BTNode* NextNode(BTNode* p) {
	BTNode* q = p->Rchild;
	if (!p->RTag) {
		while (!q->LTag) {
			q = q->Lchild;
		}
	}
	return q;
}
void main() {
	BTree* a, * x, * y, * z, * s, * t;
	BTNode* first, * next;
	a = (BTree*)malloc(sizeof(BTree));
	x = (BTree*)malloc(sizeof(BTree));
	y = (BTree*)malloc(sizeof(BTree));
	z = (BTree*)malloc(sizeof(BTree));
	s = (BTree*)malloc(sizeof(BTree));
	t = (BTree*)malloc(sizeof(BTree));
	CreateBT(a);
	CreateBT(x);
	CreateBT(y);
	CreateBT(z);
	CreateBT(s);
	CreateBT(t);
	MakeBT(s, 'E', a, a);
	MakeBT(t, 'F', a, a);
	MakeBT(y, 'C', s, t);
	MakeBT(t, 'D', a, a);
	MakeBT(x, 'B', t, a);
	MakeBT(z, 'A', x, y);

	BuildThreadBT(*z);
	first = GetFirstNode(*z);
	printf("%c\n", first->element);
	next = NextNode(z->Root->Rchild);
	printf("%c\n", next->element);
	printf("hhhhhhhhhhh\n");
}
}
  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-12-05 12:17:23  更:2021-12-05 12:18:43 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 14:49:53-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码