第五章 树与二叉树
一、数据结构定义
二叉树的顺序存储结构 二叉树的链式存储结构(即二叉链表)(因为有两个指针所以是二叉链表,如果再加一个指向父节点的指针就是三叉链表)typedef struct BTNode {
int val;
struct BTNode * left, * right;
} BTNode, * BTree;
线索二叉树的存储结构typedef struct ThreadBTNode {
int val;
struct ThreadBTNode * left, * right;
bool ltag, rtag;
} ThreadBTNode, * ThreadBTree;
树的存储结构(不是上面说的二叉树,是可能有多个孩子的树)
双亲表示法(节点仅保存其父节点信息,通过一个节点只能很快找到它的祖先。因此需要通过数组保存所有节点,才能实现对其遍历等操作,且效率较低,所以双亲表示法一般仅用在特殊场合,如并查集)typedef struct {
ElemType data;
int parent;
} PTNode;
typedef struct {
PTNode * nodes;
int n;
} PTree;
孩子表示法(用一个数组存储所有节点,每个节点内存一个链表节点指针,指向其第一个孩子。链表节点内部保存两个域:孩子的下标和指向下一个孩子对应的链表节点的指针。孩子表示法可以很快找到所有孩子节点,但寻找双亲时必须遍历整棵树,效率较低) typedef struct CCNode {
int child;
struct CCNode * next;
} CCNode;
typedef struct {
ElemType data;
CCNode * firstChild;
} TreeNode;
typedef struct {
TreeNode * nodes;
int n;
} CTree;
孩子兄弟表示法
可通过节点的左指针找到节点的第一个孩子,沿孩子的右指针可以找到该节点的所有孩子。孩子表示法中有组成树本身的节点和孩子链表节点共两种节点,孩子兄弟表示法通过两个指针,将孩子表示法中两种节点合为一种 因为是两个指针,所以孩子兄弟表示法的树是以二叉链表作为存储结构的 typedef struct CSNode {
ElemType data;
struct CSNode * firstChild, * nextSibling;
} CSNode, * CSTree;
二叉排序树节点定义(与普通二叉树一致)struct BSTNode {
int val;
BSTNode * left;
BSTNode * right;
BSTNode ( int x) : val ( x) , left ( nullptr ) , right ( nullptr ) { }
} ;
并查集的实现(初始化+查+并)
const int MAX_SIZE = 100 ;
int parent[ MAX_SIZE] ;
void Initial ( ) {
for ( int i= 0 ; i< MAX_SIZE; i++ )
parent[ i] = - 1 ;
}
int Find ( int x) {
while ( parent[ x] >= 0 )
x = parent[ x] ;
return x;
void Union ( int x, int y) {
int RootX = Find ( x) ;
int RootY = Find ( y) ;
if ( RootX!= RootY)
parent[ RootX] = RootY;
}
二、代码/算法
二叉树的基础算法
查找节点 删除二叉树 输出树高 统计二叉树节点数目 判断是否是平衡二叉树 二叉树的遍历
先序遍历 中序遍历 后序遍历 三种遍历的非递归转换(ACE中未提到) Morris遍历算法(只有竟成提到了) 层序遍历(ACE:层序遍历需要用到队列,408中要求写代码的可能性比较小,所以这里的重点是层序遍历的过程) 由遍历序列构造二叉树(只有ACE给出了用前序+中序构造二叉树的代码)
线索二叉树(408考纲是“线索二叉树的基本概念与构造”,没有提及遍历,可酌情观看)
通过中序遍历构造线索二叉树 中序线索二叉树的遍历 先序和后续线索二叉树的构造 先序线索二叉树的遍历 后续线索二叉树的遍历 并查集的初始化、查、并(代码写在上面的数据结构定义中) 二叉排序树
平衡二叉树(代码难度较高,初试可以不用管,机试有小概率会考)
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/844850.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!