`
fdyang
  • 浏览: 79795 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

C/C++ 习题. 树

 
阅读更多

树,

 

题目1:
输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。
要求不能创建任何新的结点,只调整指针的指向。

      10
     /   \
    6     14
  / \      / \
4   8  12 16

转换成双向链表
4=6=8=10=12=14=16。


解答:
首先需要理解如下基本概念:
1. 二元查找树.(Binary Search Tree)
对于每个结点,其左子树中的数据值都小于结点本身的值,而右子树种的数据值都大于或等于结点值。
The value of the key of an element is greater than the value of the key of any element in its

left subtree, and less than the vlue of the key of any element in its right subtree.

2. 双向链表.
结点里面含有两个指针域(Left, Right),一个数据域(data).


我们定义的二元查找树 节点的数据结构如下:
struct BSTreeNode
{
int m_nValue; // value of node
BSTreeNode *m_pLeft; // left child of node
BSTreeNode *m_pRight; // right child of node
};

ANSWER:
This is a traditional problem that can be solved using recursion.
For each node, connect the double linked lists created from left and right child node to form a full list.

/**
* @param root The root node of the tree
* @return The head node of the converted list.
*/
BSTreeNode * treeToLinkedList(BSTreeNode * root) {
BSTreeNode * head, * tail;
helper(head, tail, root);
return head;
}

void helper(BSTreeNode *& head, BSTreeNode *& tail, BSTreeNode *root) {
BSTreeNode *lt, *rh;
if (root == NULL) {
head = NULL, tail = NULL;
return;
}
helper(head, lt, root->m_pLeft);
helper(rh, tail, root->m_pRight);
if (lt!=NULL) {
lt->m_pRight = root;
root->m_pLeft = lt;
} else {
head = root;
}
if (rh!=NULL) {
root->m_pRight=rh;
rh->m_pLeft = root;
} else {
tail = root;
}

 

二叉树(Binary Tree ) : 每个结点至多只有两棵子树,并且,二叉树的子树有左右之分。

(链式) 存储结构: 结点包括3个域: 数据域,左、右指针域。
结点结构体如下:
struct bTreeNode{
 int data;
 bTreeNode *left,*right;
};


题目2. 遍历二叉树( Traversing binary tree ) .

 

-二叉树有3个基本单元组成:根结点(Root),左子树(Left SubTree)和右子树(Right SubTree). 若能依次遍历这三个部分,便是遍历了整个二叉树.
-基于二叉树的递归定义,有了3种遍历二叉树的递归算法.

A. 前序遍历 ( PreOrder Traverse )
    若二叉树为空,则空操作,否则 (1) 访问根结点 (2)先序遍历左子树  (3) 先序遍历右子树。

void bTree::preOrderTraverse(bTreeNode *p){
 if (p!=NULL){
  cout<<p->data;             // (1) visit root node
  preOrderTraverse(p->left)  // (2) visit left subtree
  preOrderTraverse(p->right) // (3) visit right subtree
 }
}

 
B. 中序遍历 ( InOrder Traverse )
    若二叉树为空,则空操作,否则  (1) 中序遍历左子树 (2) 访问根结点 (3)中序遍历右子树。
C. 后序遍历 ( PostOrder Traverse )
    若二叉树为空,则空操作,否则  (1) 后序遍历左子树 (2)后序遍历右子树 (3) 访问根结点


题目3. 求二叉树的深度.

深度(hight/depth) : 树中结点的最大层数(level) . root 结点的层数为1.
若一颗二叉树为空,则其深度为0,否则其深度等于左子树,或者右字数的最大深度+1  . 递归(recursive)模型如下:
/ depth(bTree) = 0          若 bTree = NULL
\depth (bTree) = max(depth(bTree->left, bTree->right) +1     其他

int bTree::depth(bTreeNode *p){
 int depLeft,depRight;
 if (bTreeNode==NULL) {
  return 0;
 }else{
  depLeft=depth(p->left);
  depRight=depth(p->right);
  return (depLeft>depRight?(depLeft+1):(depRigth+1));  //max(depLeft,depRigth)+1;
 }
}

分享到:
评论

相关推荐

    C++/数据结构 笔试面试+个人笔记资料(含答案和解释)

    C++笔试面试+个人笔记资料(含答案和解释)。包含内容为:typedef struct与struct的区别、typedef和define的区别、malloc与new的区别、函数指针和指针函数、指针数组和数组指针、写一个函数,完成内存之间的拷贝、...

    Cracking the Coding Interview PDF

    本书的题目以算法和数据结构为主,但也分别有一个章节涵盖分布式系统设计,c/c++、java、sql、多线程等知识性的内容。所有题目都有解答思路和答案,算法题目的实现使用了java。只要有一点java基础的同学,应该都可以...

    数据结构C/C++

    更为可贵的是,本书不仅仅介绍了理论知识,还提供了50多个应用实例及600多道练习题。 本书内容广博权威,结构清晰合理,是一本全新的有关数据结构与算法的教材,对于计算机科学与工程领域的从业人员也是一本很好的...

    计算机科学与工程领域——数据结构与算法的专著 C/C++数据结构算法

    更为可贵的是,本书不仅仅介绍了理论知识,还提供了50多个应用实例及600多道练习题。 本书内容广博权威,结构清晰合理,是一本全新的有关数据结构与算法的教材,对广计算机科学与工程领域的从业人员也是一本很好的...

    数据结构案例教程(C语言版).rar

    《数据结构案例教程(C语言版)》共分为8章,内容包括线性表,栈和队列,串、数组和广义表,树和二叉树,图,查找,排序和综合实训。《数据结构案例教程(C语言版)》可作为高职高专院校计算机类专业或信息类专业的教材...

    数据结构(C++)有关练习题

    在计算机科学发展过程中,早期数据结构教材大都采用PASCAL语言为描述工具,后来出现了采用C语言为描述工具的教材版本、至今又出现了采用C++语言为描述工具的多种教材版本。本教实验指导书是为已经学习过C++语言的...

    C++/C 数据结构1800题及答案

    数据结构与算法课程内容包括数据结构与抽象数据类型、算法特性及分类、...树与二叉树的等价转换、树的抽象数据类型及树的遍历、树的链式存储结构、树的父指针表示法、树的顺序存储和K叉树、图的概念和抽象数据类型、...

    算法与数据结构:C与C++描述

    对各种数据结构的存储结构和算法用C/C++语言给出了其抽象数据类型定义,并对给出的算法进行了初步的算法分析。 全书内容新颖,力求理论联系实际、深入浅出和循序渐进。每章均附有习题。 本书主要作为高等学校计算机...

    Decision_Tree.zip

    C/C++实现西瓜书4.3习题 决策树 ID3算法 注意修改main函数里面的读取路径哦

    谭浩强C语言程序设计,C++程序设计,严蔚敏数据结构,高一凡数据结构算法分析与实现.rar

    1.6 C和C++ 1.7 简单的C程序介绍 1.8 输入和输出函数 1.9 C源程序的结构特点 1.10 书写程序时应遵循的规则 1.11 C语言的字符集 1.12 C语言词汇 1.13 Turbo C 2.0 集成开发环境的使用 1.13.1 Turbo C 2.0 ...

    算法与数据结构c与c++描述

    对各种数据结构的存储结构和算法用C/C++语言给出了其抽象数据类型定义,并对给出的算法进行了初步的算法分析。 全书内容新颖,力求理论联系实际、深入浅出和循序渐进。每章均附有习题。 本书主要作为高等学校计算机...

    数据结构与算法分析(c++)张琨版课后答案

    张琨版数据结构与算法分析(c++)答案。习题一选择 :1. A , B2. B答: 选项C指的是有穷性,长度有限不是算法的基本特性。3. B4. D5. A6. A7. C8. B9. D答: (n)=O( ); (n)=O( ); (n)=O( ); (n)=O( ) 10. A填空 :1....

    谭浩强C语言程序设计,C++程序设计,严蔚敏数据结构,高一凡数据结构算法分析与实现.rar )

    1.6 C和C++ 1.7 简单的C程序介绍 1.8 输入和输出函数 1.9 C源程序的结构特点 1.10 书写程序时应遵循的规则 1.11 C语言的字符集 1.12 C语言词汇 1.13 Turbo C 2.0 集成开发环境的使用 1.13.1 Turbo C 2.0 ...

    Thinking in Java 中文第四版+习题答案

    附录C Java编程规则 附录D 性能 D.1 基本方法 D.2 寻找瓶颈 D.2.1 安插自己的测试代码 D.2.2 JDK性能评测 D.2.3 特殊工具 D.2.4 性能评测的技巧 D.3 提速方法 D.3.1 常规手段 D.3.2 依赖语言的方法 D.3.3 特殊情况 D...

    《数据结构c语言版》算法及习题

    更为可贵的是,本书不仅仅介绍了理论知识,还提供了50多个应用实例及600多道练习题。 本书内容广博权威,结构清晰合理,是一本全新的有关数据结构与算法的教材,对于计算机科学与工程领域的从业人员也是一本很好的...

    数据结构 C++语言描述——应用标准模板库(STL)(第2版)源代码

    书中各章章前提出学习目标,章后附有丰富的练习题、答案以及书面练习和上机编程练习,指导读者迅速、全面地掌握核心知识点和编程技巧。 本书可作为计算机及相关专业数据结构课程的核心教材,对于广大研发人员,也是...

    2024蓝桥杯cc 大学b组指导.doc

    为了备战2024年蓝桥杯C/C++大学B组的比赛,以下是一些建议和指导策略: 1. **掌握基础知识**:确保你对C/C++语言的基础知识有深入的理解,包括基本语法、数据类型、控制结构、函数、数组、指针等。 2. **深入学习...

    数据结构与算法:C++描述

    更为可贵的是,本书不仅仅介绍了理论知识,还提供了50多个应用实例及600多道练习题。 本书内容广博权威,结构清晰合理,是一本全新的有关数据结构与算法的教材,对于计算机科学与工程领域的从业人员也是一本很好的...

Global site tag (gtag.js) - Google Analytics