那天看到这么一个题目,内容是这样的:
引用
编写一算法,利用叶子结点中的空指针域将所有叶子结点链接为一个双链表,算法返回头结点的地址。
我大概思考了一下,首先得先得到这棵树的一个遍历,然后树中节点的左子树指针相当于双向链表中的prior指针,右子树指针相当于双向链表的next指针,那么头结点应该就是叶子中最左的,我们前面得到的遍历结果中,凡是左右子树都为NULL的就是叶子,只需要将这些链接到双向链表中就OK了。
我给出的伪码如下:
/*
* 假设二叉树的结点定义 如下:
* struct TNode {
* TNode* rChild;
* TNode* lChild;
* T value;
* };
*/
TNode* linkLeaf(TNode* pRoot) {
Stack auxiliaryStack;
Stack inorderStack;
TNode* p=pRoot;
while (true) {
if (p) {
auxiliaryStack.push(p);
p = p->lChild;
} else {
if (auxiliaryStack.size()) {
p = auxiliaryStack.pop();
inorderStack.push(p);
p = p->rChild;
} else {
break;
}
}
}
TNode* pCurLeaf = NULL;
while (inorderStack.size()) {
p = inorderStack.pop();
if (!p->rChild&&!p->lChild) {
if (!pCurLeaf) {
pCurLeaf = p;
} else {
p->rChild = pCurLeaf;
pCurLeaf->lChild = p;
pCurLeaf = p;
}
}
}
return pCurLeaf;
}
分享到:
相关推荐
《华中师大C语言数据结构》第六章主要讲解了树和二叉树的相关知识,这一章的内容包括了对二叉树性质的理解和应用。在自测卷中,题目涉及了多个方面,如二叉树的性质判断、二叉树的存储结构、哈夫曼树的构建以及遍历...
本资料主要聚焦于树和二叉树这一主题,采用C语言作为实现工具,来源于清华大学出版社的教材第六章。以下是对这些概念的详细阐述: 一、树的基本概念 树是一种非线性的数据结构,它由若干个节点通过边连接而成,每个...
### 树和二叉树知识点解析 #### 一、基础知识概览 1. **树**:树是一种非线性数据结构,由一个根节点及零个或...通过上述解析,我们可以了解到树和二叉树的相关知识点及其应用,并能更好地理解和解答相关的考试题目。
《C语言学习全国题目详解》 C语言是一种基础且重要的编程语言,广泛应用于计算机科学教育和实际开发中。...通过解答这些题目,考生可以检验自己对C语言的掌握程度,并找出需要进一步学习和巩固的地方。
《ACM PUK 题目解答源码100题》是针对北京大学ACM竞赛题目的一系列解题源代码集合,主要采用C/C++编程语言。这些源代码旨在帮助学习者理解和解决算法问题,提升在ACM(国际大学生程序设计竞赛)中的竞争力。 首先,...
《数据结构与算法(C语言)》中的练习题库聚焦在一树与二叉树这一核心主题上,涵盖了数据结构和算法的基础知识。这个压缩包包含了五个文件,分别对应于不同的算法实现和问题解答,旨在帮助学习者深入理解和掌握树与...
计算机复试机试题目解答主要涉及的是编程能力、算法理解与应用、数据结构基础知识以及操作系统原理等核心IT领域的知识。在准备此类考试时,考生需要具备扎实的编程基础,熟悉多种编程语言,如C、C++、Java或Python,...
- **多文件共享**:在多个.C文件中可以定义同名的全局变量,但只有其中一个文件需要对变量进行初始化。 #### 17. for(;;)循环 - **无限循环**:表示一个无限循环,常用于模拟操作系统中的事件循环。 #### 18. do.....
6. 二叉树的先序、中序和后序遍历:题目给出的中序和后序序列可以推断出先序序列,对于给定的例子,先序遍历是E,A,G,C,F,B,D,因此选项C正确。 7. 二叉树转化为森林:从后序和中序序列可以重建二叉树,根据给定序列...
第六章主要讲解了树和二叉树的基本概念和特性,涉及了多项选择...这些题目和解答覆盖了树和二叉树的基础知识,包括它们的定义、性质、遍历方式以及相关计算。了解这些知识点对于理解和操作树和二叉树数据结构至关重要。
【C语言华为笔试题目解析】 1. **static的用途**: ...以上是对华为笔试题目的详细解答,涵盖了C语言基础、数据结构、算法、操作系统、计算机网络等多个方面。这些知识点对于准备华为笔试或其他IT公司的面试至关重要。
线性表是最基础的数据结构之一,它是由n个相同类型元素构成的有限序列。在C或C++中,线性表可以表现为数组或链表。数组实现简单,但插入和删除操作可能涉及大量元素的移动;链表则允许快速插入和删除,但访问速度较...
### 二叉树问题解析 #### 一、基础知识回顾 在深入探讨具体问题之前,我们需要先回顾一下关于二叉树的一些基本概念...这种类型的题目在计算机科学的数据结构和算法课程中非常常见,也是面试中经常出现的考察点之一。
这包括对图论、树和二叉树等数据结构的深入理解,掌握组合数学基本原理,具备信息学常识题目的解答能力,了解数据存储的基础知识,以及熟悉至少一种编程语言。所有这些知识点共同构成了信息学奥林匹克竞赛的理论基础...
3. C语言程序理解:这段代码计算一个循环,其中首次迭代时current_value初始化为65536并累加current_value对3的余数,然后在后续迭代中递减current_value并累加余数,直到current_value小于等于0。由于65536 % 3等于...
- **题目**: 假设在一棵二叉树中,双分支结点数为15,单分支结点数为30个,则叶子结点数为多少个? - **分析**: 对于任何二叉树,其叶子节点的数量等于双分支节点的数量加1。这是因为每个双分支节点会新增两个分支,...
在C语言中,二元查找树(Binary Search Tree,BST)是一种特殊类型的二叉树,它的每个节点都包含一个键值,并且满足以下性质:所有左子节点的键值小于节点的键值,所有右子节点的键值大于节点的键值。这种结构使得...
在这个名为“收集的一些算法的题目及其解答”的压缩包中,我们可以发现它主要涵盖了与算法和数据结构相关的学习资源,特别是针对C和C++编程语言。这个文档集合对于那些正在学习计算机科学,尤其是对算法和数据结构感...
对于《2013.9.14重邮机试第一场.doc》、《2013.9.15重邮机试第1场.doc》和《2013.9.14重邮机试第二场.doc》这三份文档,可以仔细研读,模拟实际考试环境,逐一解答题目,以检验自己的准备程度。