`
isiqi
  • 浏览: 16347045 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

一些关于树的题目

阅读更多

---------------------------------------------------------------------------

将一棵二叉搜索树转换为有序链表。

/***************************************************************************
* 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;
}

---------------------------------------------------------------------------

分享到:
评论

相关推荐

    ACM自己做的一些题目

    1. **10**: 可能代表第10个题目,这可能是一个涉及高级算法或者复杂数据结构的问题,比如最小生成树、最短路径算法(Dijkstra或Floyd-Warshall)或者NP完全问题的近似解法。 2. **1**: 第一个题目往往作为入门级别...

    几道经典线段树题目及代码2

    “几道经典线段树题目及代码2”可能包含了一些具有代表性的线段树题目,涵盖了不同的操作类型和复杂情况。这些题目可以帮助学习者加深对线段树的理解,提升解决实际问题的能力。通过解题,可以锻炼逻辑思维,提高...

    几道经典线段树题目及代码

    本资源包含了一些经典线段树题目及对应的代码实现,旨在帮助学习者深入理解和掌握这一重要数据结构。 线段树的基本思想是将一个数组或序列通过分治策略进行划分,形成一棵树状结构,每个节点代表一个区间的值。线段...

    poj的一些题目的代码

    【标题】"poj的一些题目的代码"涉及的是在编程竞赛平台POJ(Programming Online Judge)上的一些解题代码。POJ是中国北京大学主办的一个在线编程练习系统,它提供了丰富的算法题目,供参赛者进行编程练习,提升算法...

    HDOJ题目分类 HDOJ题目分类

    【标题】:“HDOJ题目分类 HDOJ题目分类” HDOJ,全称为Happy DingO Online Judge,是一个在线编程竞赛平台,它为参赛者提供了大量编程题目进行练习和比赛,旨在提升编程技能和算法理解。HDOJ的题目分类是帮助用户...

    线段树题目.pdf

    线段树题目

    杭电OJ题目分类

    这些题目需要学习和掌握数据结构的基本概念和方法,例如栈、队列、树、图等。 7. 博弈:杭电OJ题目分类中有多道博弈题目,例如1079等。这些题目需要学习和掌握博弈的基本思想和方法,例如博弈树、博弈搜索等。 8. ...

    数据挖掘的一些题目

    数据挖掘的一些题目 本文总结了五个数据挖掘笔试题目,涵盖了数据处理、排序、统计、频率分析等多方面的知识点。 1. 数据去重复:给定两个文件,各存放 50 亿个 URL,每个 URL 各占 64 字节,内存限制是 4G,要求...

    数据结构-树的一些练习题

    题目中提到了关于二叉树度数和节点数量的关系。 4. **高度和结点数量的关系**:对于只有度为0(叶节点)和度为2的结点的二叉树,其结点数量至少是2的h次幂减1,其中h为高度。 5. **二叉排序树**:二叉排序树(BST...

    算法文档无代码一些与树有关的题目

    树的一些基本术语包括: - 根节点(Root):树的顶层节点。 - 子节点(Child):与父节点直接相连的节点。 - 父节点(Parent):子节点的直接前驱节点。 - 叶节点(Leaf):没有子节点的节点。 - 路径(Path):一...

    树的题目.doc

    1、树的统计 输入森林中的结点关系,统计森林中树的数量,输出树的根。 输入: 第一行:n:结点数量;k:边数;(n,k) 以下k行:每行两个结点编号:i,j:i是j的父结点(I,j)。 输出: 第一行:树的数量。 第二行:...

    安芯网盾笔试题目

    这是一个关于递归函数的题目,函数 `print` 将字符串 `str` 递归输出。函数 `print` 的参数是指向字符的指针 `s`,递归调用自己,直到 `s` 为空,然后输出字符串的每个字符。 2. 在小端序的机器中... 这是一个关于...

    洛谷oj上面的一些题目答案

    【洛谷OJ题目答案】集合 洛谷(Luogu)在线判题系统是许多编程爱好者和竞赛选手磨练技能的重要平台,尤其对于ACM/ICPC(国际大学生程序设计竞赛)的训练来说,其丰富的题目库和实时的评测机制极具价值。本压缩包...

    ACM hdu 线段树题目+源代码

    ACM hdu 线段树题目+源代码 线段树是一种非常重要的数据结构,它广泛应用于算法竞赛和实际编程中。今天,我们将通过 ACM hdu 的几个题目来学习和掌握线段树的基本概念和应用。 线段树的基本概念 线段树是一种...

    Poj中的一些题目源代码

    这些文件名揭示了一些关于编程竞赛和算法的知识点,主要集中在解决特定问题的源代码上。在编程竞赛中,POJ(Problemset Online Judge)是一个知名的在线判题系统,用于检验和提交程序解决问题的能力,而OI(Online...

    HDU图论题目分类

    本分类涵盖了图论领域的多种类型的题目,涉及到图论的基本概念、图的遍历、图的搜索、图的匹配、图的.isConnected性、图的最短路径、图的最小生成树、图的拓扑排序等多个方面。 图论是一个重要的计算机科学领域,...

    最小生成树+并查集题目列表.docx

    本资源提供了关于最小生成树和并查集的题目列表,共40道题目,涵盖了基础最小生成树、基础并查集、枚举最小生成树、同构图、离线并查集、dfs 枚举组合情况、最大生成树、带权并查集、异或并查集、斯坦纳树、LCA等...

    hdu 一些简单题目 ac代码

    在学习和解这些题目时,你可能会遇到以下一些关键知识点: - 输入输出:学会使用cin/cout或者scanf/printf进行标准输入输出。 - 基本数据类型:理解int、double、char等数据类型的使用。 - 流程控制:掌握if语句、...

    hdu题目分类

    - **1053**:与赫夫曼编码相关的贪心题目,这类题目要求学生理解赫夫曼树的构造过程及其应用场景。 ##### 5. 动态规划类题目 - **1003**:DP经典问题,最大连续子段和,要求参赛者掌握一维DP的基本框架。 - **1024*...

    Google编程大赛题目

    - **数据结构**:如数组、链表、栈、队列、哈希表、树(二叉树、平衡二叉树、B树、Trie树)和图结构等,它们是解决问题的关键工具。 - **字符串处理**:涉及到模式匹配、字符串操作、正则表达式等。 - **数值计算*...

Global site tag (gtag.js) - Google Analytics