`
- 浏览:
16498811 次
- 性别:
- 来自:
济南
-
---------------------------------------------------------------------------将一棵二叉搜索树转换为有序链表。/**************************************************************************** Description:* 将一棵二叉搜索树转换为有序链表* Author : wplxb* Language: C* Date : 2007-11-01***************************************************************************/#include <stdio.h>typedef struct node{ int d; struct node * l; struct node * r;} * node;/* 中序遍历框架。 */node convert(node h){ static node head = NULL; /* 最终返回的头指针。 */ static node tail = NULL; /* 尾指针,始终指向当前构建好的链表尾。 */ if (!h) { return NULL; } /* 遍历左子树。 */ convert(h->l); /* 处理根节点。 */ if (tail) { tail->l = h; } tail = h; /* 使尾指针指向当前构建好的链表尾。 */ if (!head) { head = tail; } /* 遍历右子树。 */ convert(h->r); return head;}int main(int argc, char * argv[]){ /* * 测试数据: * __a 5__ * __b 3__ c 6 * d 1__ e 4 * f 2 */ struct node a = {5, NULL, NULL}; struct node b = {3, NULL, NULL}; struct node c = {6, NULL, NULL}; struct node d = {1, NULL, NULL}; struct node e = {4, NULL, NULL}; struct node f = {2, NULL, NULL}; node head; a.l = &b; a.r = &c; b.l = &d; b.r = &e; d.r = &f; head = convert(&a); while (head) { printf("%d\n", head->d); head = head->l; } return 0;}---------------------------------------------------------------------------将一个结点为树节点的有序链表转换为平衡二叉搜索树。/**************************************************************************** Description:* 将一个结点为树节点的有序链表转换为平衡二叉搜索树* Author : wplxb* Language: C* Date : 2007-11-02***************************************************************************/#include <stdio.h>typedef struct node{ int d; struct node * l; /* 链表使用 l 作为 next。 */ struct node * r;} * node;node convert(node h){ node prev = h; node head = h; node fast = h; if (!h) { return NULL; } if (!h->l) { h->r = NULL; return h; } while (fast && fast->l) { fast = fast->l->l; prev = head; head = head->l; } prev->l = NULL; head->r = convert(head->l); head->l = convert(h); return head;}void inorder_print(node h){ if (!h) { return; } inorder_print(h->l); printf("%d\n", h->d); inorder_print(h->r);}int main(int argc, char * argv[]){ /* * 测试数据: * a 1, b 2, c 3, d 4, e 5, f 6 */ struct node a = {1, NULL, NULL}; struct node b = {2, NULL, NULL}; struct node c = {3, NULL, NULL}; struct node d = {4, NULL, NULL}; struct node e = {5, NULL, NULL}; struct node f = {6, NULL, NULL}; node head; a.l = &b; b.l = &c; c.l = &d; d.l = &e; e.l = &f; head = convert(&a); inorder_print(head); return 0;}---------------------------------------------------------------------------
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
1. **10**: 可能代表第10个题目,这可能是一个涉及高级算法或者复杂数据结构的问题,比如最小生成树、最短路径算法(Dijkstra或Floyd-Warshall)或者NP完全问题的近似解法。 2. **1**: 第一个题目往往作为入门级别...
“几道经典线段树题目及代码2”可能包含了一些具有代表性的线段树题目,涵盖了不同的操作类型和复杂情况。这些题目可以帮助学习者加深对线段树的理解,提升解决实际问题的能力。通过解题,可以锻炼逻辑思维,提高...
本资源包含了一些经典线段树题目及对应的代码实现,旨在帮助学习者深入理解和掌握这一重要数据结构。 线段树的基本思想是将一个数组或序列通过分治策略进行划分,形成一棵树状结构,每个节点代表一个区间的值。线段...
【标题】"poj的一些题目的代码"涉及的是在编程竞赛平台POJ(Programming Online Judge)上的一些解题代码。POJ是中国北京大学主办的一个在线编程练习系统,它提供了丰富的算法题目,供参赛者进行编程练习,提升算法...
【标题】:“HDOJ题目分类 HDOJ题目分类” HDOJ,全称为Happy DingO Online Judge,是一个在线编程竞赛平台,它为参赛者提供了大量编程题目进行练习和比赛,旨在提升编程技能和算法理解。HDOJ的题目分类是帮助用户...
线段树题目
这些题目需要学习和掌握数据结构的基本概念和方法,例如栈、队列、树、图等。 7. 博弈:杭电OJ题目分类中有多道博弈题目,例如1079等。这些题目需要学习和掌握博弈的基本思想和方法,例如博弈树、博弈搜索等。 8. ...
数据挖掘的一些题目 本文总结了五个数据挖掘笔试题目,涵盖了数据处理、排序、统计、频率分析等多方面的知识点。 1. 数据去重复:给定两个文件,各存放 50 亿个 URL,每个 URL 各占 64 字节,内存限制是 4G,要求...
题目中提到了关于二叉树度数和节点数量的关系。 4. **高度和结点数量的关系**:对于只有度为0(叶节点)和度为2的结点的二叉树,其结点数量至少是2的h次幂减1,其中h为高度。 5. **二叉排序树**:二叉排序树(BST...
树的一些基本术语包括: - 根节点(Root):树的顶层节点。 - 子节点(Child):与父节点直接相连的节点。 - 父节点(Parent):子节点的直接前驱节点。 - 叶节点(Leaf):没有子节点的节点。 - 路径(Path):一...
1、树的统计 输入森林中的结点关系,统计森林中树的数量,输出树的根。 输入: 第一行:n:结点数量;k:边数;(n,k) 以下k行:每行两个结点编号:i,j:i是j的父结点(I,j)。 输出: 第一行:树的数量。 第二行:...
这是一个关于递归函数的题目,函数 `print` 将字符串 `str` 递归输出。函数 `print` 的参数是指向字符的指针 `s`,递归调用自己,直到 `s` 为空,然后输出字符串的每个字符。 2. 在小端序的机器中... 这是一个关于...
【标题】"HOJ部分题目源代码"涉及的是湖南大学在线判题系统(Hunan University Online Judge,简称HOJ)的一些编程题目解决方案。这些源代码是参赛者在解决HOJ平台上的算法问题时编写的,旨在展示不同问题的解决思路...
【洛谷OJ题目答案】集合 洛谷(Luogu)在线判题系统是许多编程爱好者和竞赛选手磨练技能的重要平台,尤其对于ACM/ICPC(国际大学生程序设计竞赛)的训练来说,其丰富的题目库和实时的评测机制极具价值。本压缩包...
ACM hdu 线段树题目+源代码 线段树是一种非常重要的数据结构,它广泛应用于算法竞赛和实际编程中。今天,我们将通过 ACM hdu 的几个题目来学习和掌握线段树的基本概念和应用。 线段树的基本概念 线段树是一种...
这些文件名揭示了一些关于编程竞赛和算法的知识点,主要集中在解决特定问题的源代码上。在编程竞赛中,POJ(Problemset Online Judge)是一个知名的在线判题系统,用于检验和提交程序解决问题的能力,而OI(Online...
本资源提供了关于最小生成树和并查集的题目列表,共40道题目,涵盖了基础最小生成树、基础并查集、枚举最小生成树、同构图、离线并查集、dfs 枚举组合情况、最大生成树、带权并查集、异或并查集、斯坦纳树、LCA等...
在学习和解这些题目时,你可能会遇到以下一些关键知识点: - 输入输出:学会使用cin/cout或者scanf/printf进行标准输入输出。 - 基本数据类型:理解int、double、char等数据类型的使用。 - 流程控制:掌握if语句、...
- **1053**:与赫夫曼编码相关的贪心题目,这类题目要求学生理解赫夫曼树的构造过程及其应用场景。 ##### 5. 动态规划类题目 - **1003**:DP经典问题,最大连续子段和,要求参赛者掌握一维DP的基本框架。 - **1024*...
- **数据结构**:如数组、链表、栈、队列、哈希表、树(二叉树、平衡二叉树、B树、Trie树)和图结构等,它们是解决问题的关键工具。 - **字符串处理**:涉及到模式匹配、字符串操作、正则表达式等。 - **数值计算*...