`
Qaohao
  • 浏览: 261663 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

C之一个二叉树题目解答

阅读更多
那天看到这么一个题目,内容是这样的:
引用
编写一算法,利用叶子结点中的空指针域将所有叶子结点链接为一个双链表,算法返回头结点的地址。


我大概思考了一下,首先得先得到这棵树的一个遍历,然后树中节点的左子树指针相当于双向链表中的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;

}
分享到:
评论
5 楼 Qaohao 2009-10-12  
经过我这么一整,虽然也达到了连接叶子的目的,但是破坏了树的结构。

修改树节点定义,增加一个叶子标志位就行了。
struct TNode { 
     TNode* rChild; 
     TNode* lChild; 
     T value; 
     bool isLeaf;
};
   
4 楼 Qaohao 2009-10-12  
是啊。我那天真正理解你的意思,如果串成双向链表以后,叶子的左右子树的指针就不为NULL,这样就不能区分叶子了。多谢指教,看来我考虑问题还不是很周全啊。
3 楼 hellojinjie 2009-10-11  
问题是当你将叶结点串成双链表的时候,叶结点的左右指针已经不是NULL了
2 楼 Qaohao 2009-09-23  
我觉的没有必要增加这个标记,因为当左右子树不存在时,那就是叶子,你觉的了。换句话说,就是这个条件!p->rChild&&!p->lChild成立就是叶子。
1 楼 hellojinjie 2009-09-17  
我晕,,,发个贴还要做什么个小测试.....
===================
二叉树的节点定义,我觉得还应该再增加一个标记,用来标记是否叶节点,不然就无法判断一个节点是否叶子了

相关推荐

    《华中师大c语言数据结构》第6章 树和二叉树__自测卷解答1

    《华中师大C语言数据结构》第六章主要讲解了树和二叉树的相关知识,这一章的内容包括了对二叉树性质的理解和应用。在自测卷中,题目涉及了多个方面,如二叉树的性质判断、二叉树的存储结构、哈夫曼树的构建以及遍历...

    数据结构(C语言版) 清华大学出版社 第六章树和二叉树 例题答案

    本资料主要聚焦于树和二叉树这一主题,采用C语言作为实现工具,来源于清华大学出版社的教材第六章。以下是对这些概念的详细阐述: 一、树的基本概念 树是一种非线性的数据结构,它由若干个节点通过边连接而成,每个...

    树和二叉树.doc

    ### 树和二叉树知识点解析 #### 一、基础知识概览 1. **树**:树是一种非线性数据结构,由一个根节点及零个或...通过上述解析,我们可以了解到树和二叉树的相关知识点及其应用,并能更好地理解和解答相关的考试题目。

    c语言学习全国的题目

    《C语言学习全国题目详解》 C语言是一种基础且重要的编程语言,广泛应用于计算机科学教育和实际开发中。...通过解答这些题目,考生可以检验自己对C语言的掌握程度,并找出需要进一步学习和巩固的地方。

    ACM PUK 题目解答源码100题

    《ACM PUK 题目解答源码100题》是针对北京大学ACM竞赛题目的一系列解题源代码集合,主要采用C/C++编程语言。这些源代码旨在帮助学习者理解和解决算法问题,提升在ACM(国际大学生程序设计竞赛)中的竞争力。 首先,...

    3.《数据结构与算法(C语言)》练习题库一树与二叉树-ANSWER.zip

    《数据结构与算法(C语言)》中的练习题库聚焦在一树与二叉树这一核心主题上,涵盖了数据结构和算法的基础知识。这个压缩包包含了五个文件,分别对应于不同的算法实现和问题解答,旨在帮助学习者深入理解和掌握树与...

    计算机复试机试题目解答

    计算机复试机试题目解答主要涉及的是编程能力、算法理解与应用、数据结构基础知识以及操作系统原理等核心IT领域的知识。在准备此类考试时,考生需要具备扎实的编程基础,熟悉多种编程语言,如C、C++、Java或Python,...

    C语言面试题大汇总 题目和解答

    - **多文件共享**:在多个.C文件中可以定义同名的全局变量,但只有其中一个文件需要对变量进行初始化。 #### 17. for(;;)循环 - **无限循环**:表示一个无限循环,常用于模拟操作系统中的事件循环。 #### 18. do.....

    树和二叉树习题PPT学习教案.pptx

    6. 二叉树的先序、中序和后序遍历:题目给出的中序和后序序列可以推断出先序序列,对于给定的例子,先序遍历是E,A,G,C,F,B,D,因此选项C正确。 7. 二叉树转化为森林:从后序和中序序列可以重建二叉树,根据给定序列...

    第六章树和二叉树学生版1

    第六章主要讲解了树和二叉树的基本概念和特性,涉及了多项选择...这些题目和解答覆盖了树和二叉树的基础知识,包括它们的定义、性质、遍历方式以及相关计算。了解这些知识点对于理解和操作树和二叉树数据结构至关重要。

    c语言华为笔试题目大全

    【C语言华为笔试题目解析】 1. **static的用途**: ...以上是对华为笔试题目的详细解答,涵盖了C语言基础、数据结构、算法、操作系统、计算机网络等多个方面。这些知识点对于准备华为笔试或其他IT公司的面试至关重要。

    数据结构C\c++参考练习(二叉树,线性表等等)

    线性表是最基础的数据结构之一,它是由n个相同类型元素构成的有限序列。在C或C++中,线性表可以表现为数组或链表。数组实现简单,但插入和删除操作可能涉及大量元素的移动;链表则允许快速插入和删除,但访问速度较...

    二叉树问题

    ### 二叉树问题解析 #### 一、基础知识回顾 在深入探讨具体问题之前,我们需要先回顾一下关于二叉树的一些基本概念...这种类型的题目在计算机科学的数据结构和算法课程中非常常见,也是面试中经常出现的考察点之一。

    最近5年NOIP初赛CSP第一轮比赛常考题目讲义

    这包括对图论、树和二叉树等数据结构的深入理解,掌握组合数学基本原理,具备信息学常识题目的解答能力,了解数据存储的基础知识,以及熟悉至少一种编程语言。所有这些知识点共同构成了信息学奥林匹克竞赛的理论基础...

    Google 2011 校园招聘笔试题 全部题目及解答 非影印版

    3. C语言程序理解:这段代码计算一个循环,其中首次迭代时current_value初始化为65536并累加current_value对3的余数,然后在后续迭代中递减current_value并累加余数,直到current_value小于等于0。由于65536 % 3等于...

    很强的资源:数据结构题库+答案

    - **题目**: 假设在一棵二叉树中,双分支结点数为15,单分支结点数为30个,则叶子结点数为多少个? - **分析**: 对于任何二叉树,其叶子节点的数量等于双分支节点的数量加1。这是因为每个双分支节点会新增两个分支,...

    一波C语言二元查找树算法题目解答实例汇总

    在C语言中,二元查找树(Binary Search Tree,BST)是一种特殊类型的二叉树,它的每个节点都包含一个键值,并且满足以下性质:所有左子节点的键值小于节点的键值,所有右子节点的键值大于节点的键值。这种结构使得...

    收集的一些算法的题目及其解答

    在这个名为“收集的一些算法的题目及其解答”的压缩包中,我们可以发现它主要涵盖了与算法和数据结构相关的学习资源,特别是针对C和C++编程语言。这个文档集合对于那些正在学习计算机科学,尤其是对算法和数据结构感...

    2014重邮华为机试题目

    对于《2013.9.14重邮机试第一场.doc》、《2013.9.15重邮机试第1场.doc》和《2013.9.14重邮机试第二场.doc》这三份文档,可以仔细研读,模拟实际考试环境,逐一解答题目,以检验自己的准备程度。

Global site tag (gtag.js) - Google Analytics