二叉树的基本操作(严蔚敏)
来源:互联网 发布:js qq客服代码 编辑:程序博客网 时间:2024/06/06 01:19
二叉树是一种树形结构,它的特点是每个结点至多只有两棵子树(即二叉树中不存在度大于2 的结点),并且,二叉树的子树有左右之分,其次序不能颠倒。
二叉树的链表 。
typedef struct BiTNode { TElemType data; struct BiTNode *lchild,*rchild; /* 左右孩子指针 */ }BiTNode,*BiTree;
Status InitBiTree(BiTree *T) { /* 操作结果: 构造空二叉树T */ *T=NULL; return OK; }
void DestroyBiTree(BiTree *T) { /* 初始条件: 二叉树T存在。操作结果: 销毁二叉树T */ if(*T) /* 非空树 */ { if((*T)->lchild) /* 有左孩子 */ DestroyBiTree(&(*T)->lchild); /* 销毁左孩子子树 */ if((*T)->rchild) /* 有右孩子 */ DestroyBiTree(&(*T)->rchild); /* 销毁右孩子子树 */ free(*T); /* 释放根结点 */ *T=NULL; /* 空指针赋0 */ } }
void CreateBiTree(BiTree *T) { /* 算法6.4:按先序次序输入二叉树中结点的值(可为字符型或整型,在主程中 */ /* 定义),构造二叉链表表示的二叉树T。变量Nil表示空(子)树。有改动 */ TElemType ch; #ifdef CHAR scanf("%c",&ch); #endif #ifdef INT scanf("%d",&ch); #endif if(ch==Nil) /* 空 */ *T=NULL; else { *T=(BiTree)malloc(sizeof(BiTNode)); if(!*T) exit(OVERFLOW); (*T)->data=ch; /* 生成根结点 */ CreateBiTree(&(*T)->lchild); /* 构造左子树 */ CreateBiTree(&(*T)->rchild); /* 构造右子树 */ } }
Status BiTreeEmpty(BiTree T) { /* 初始条件: 二叉树T存在 */ /* 操作结果: 若T为空二叉树,则返回TRUE,否则FALSE */ if(T) return FALSE; else return TRUE; }
int BiTreeDepth(BiTree T) { /* 初始条件: 二叉树T存在。操作结果: 返回T的深度 */ int i,j; if(!T) return 0; if(T->lchild) i=BiTreeDepth(T->lchild); else i=0; if(T->rchild) j=BiTreeDepth(T->rchild); else j=0; return i>j?i+1:j+1; }
TElemType Root(BiTree T) { /* 初始条件: 二叉树T存在。操作结果: 返回T的根 */ if(BiTreeEmpty(T)) return Nil; else return T->data; }
TElemType Value(BiTree p) { /* 初始条件: 二叉树T存在,p指向T中某个结点 */ /* 操作结果: 返回p所指结点的值 */ return p->data; }
void Assign(BiTree p,TElemType value) { /* 给p所指结点赋值为value */ p->data=value; }
TElemType LeftChild(BiTree T,TElemType e) { /* 初始条件: 二叉树T存在,e是T中某个结点 */ /* 操作结果: 返回e的左孩子。若e无左孩子,则返回"空" */ BiTree a; if(T) /* 非空树 */ { a=Point(T,e); /* a是结点e的指针 */ if(a&&a->lchild) /* T中存在结点e且e存在左孩子 */ return a->lchild->data; /* 返回e的左孩子的值 */ } return Nil; /* 其余情况返回空 */ } TElemType RightChild(BiTree T,TElemType e) { /* 初始条件: 二叉树T存在,e是T中某个结点 */ /* 操作结果: 返回e的右孩子。若e无右孩子,则返回"空" */ BiTree a; if(T) /* 非空树 */ { a=Point(T,e); /* a是结点e的指针 */ if(a&&a->rchild) /* T中存在结点e且e存在右孩子 */ return a->rchild->data; /* 返回e的右孩子的值 */ } return Nil; /* 其余情况返回空 */ }
0 0
- 二叉树的基本操作(严蔚敏)
- 树(二叉树)的基本操作
- 二叉树的基本操作(C++)
- 二叉树的基本操作(二)
- 二叉树的基本操作(二)
- 二叉树的基本操作(递归)
- 二叉树的基本操作(1)
- (数据结构)二叉树的基本操作
- 二叉树的基本操作(总结)
- 二叉树的基本操作
- 二叉树的基本操作
- 二叉树的基本操作
- 二叉树的基本操作
- 二叉树的基本操作
- 二叉树的基本操作
- 二叉树的基本操作
- 二叉树的基本操作
- 二叉树的基本操作
- c++运算符重载的方法提要
- 选项卡控制器(tabBarController)基础
- 写给初学者22_android_百分比布局
- 二分图的最大匹配——匈牙利算法
- 【面试题】剑指Offer-50-求两个节点的最近公共祖先
- 二叉树的基本操作(严蔚敏)
- 深入理解LayoutInflater.inflate()
- JVM内存模型
- redis高级实用特性
- Python针对特定服务定制的代理工具V2.0------(zipdeal.py)
- Android--推送机制实现原理(四)-自己实现推送功能--心跳包
- ARM指令集发展概述
- ubuntu server 在hyper-v下连接网络
- HTML <label> 标签的 for 属性